본문 바로가기

Computer Science/운영체제 (Operating System)10

PintOS | Project3. Virtual Memory | 트러블 모음 2 Stack growth 트러블 모음 pt-write-code2 테스트 케이스 pt-write-code2 테스트는 잘못된 영역(코드 세그먼트)에 read() 시도를 하는 테스트이다. 메모리 관점에서 보면 read() 시스템콜은 파일의 데이터를 읽어서 메모리의 버퍼에 쓰는 작업을 포함한다. 그러나 현재는 코드 세그먼트는 not writable 해야 하는데, read()가 되고 있는 상황, 즉 not writable한 페이지에 write가 되는 상황이다. 문제상황을 실제 파일에서 확인해보았다. pt-write-code2 테스트 코드는 다음과 같으며, void test_main (void) { int handle; CHECK ((handle = open ("sample.txt")) > 1, "open \\"sa.. 2023. 12. 27.
PintOS | Project3. Virtual Memory | 트러블 모음 1 Anonymous Page 1. Lazy Loading - thread_current()에서 터지는 문제 spt_insert_page 에서 문제를 발견할 수 있었다. hash_insert()는 첫번째 인자로 hash 구조체를 받아야 하는데, spt를 줬다. &spt 를 &spt->spt_pages 로 바꿔주니 문제 해결 2. Page fault 핸들링 때, spt에서 페이지를 찾지 못하는 문제 exit(-33)을 어디에 넣어놨냐면 .. 뭐가 문제였을까?? 애초에 page를 spt에 제대로 넣어주지 못했거나, 제대로 넣어줬으나 탐색 과정상의 문제로 찾지 못하는 상황인 듯 하다. 여기서 출발하여 원인을 탐색하다보니 다음과 같은 문제점을 발견할 수 있었다. vm_stack_growth(), setup_stac.. 2023. 12. 24.
운영체제 | 가상메모리 | 페이징과 주소번역 더 알아보기 큰 그림 요약 가상 메모리는 다음 페이지들의 집합으로 표현될 수 있다: 메인메모리에 로드된 cached page (익명 페이지와 file-backed page들) cached page는 메인메모리에 복제(load)되어 캐싱된 페이지를 뜻한다. cached 메모리의 경우 해당 프로세스(스레드) 페이지 테이블 중에서, 해당 페이지에 해당하는 PTE의 valid bit (다른 말로 present bit)가 1로 설정된다. 해당 프로세스(스레드) 페이지 테이블의 위치는 PTBR 에 저장된다. 메인메모리에 로드되지 않은 데이터 cached page 였다가 스왑 아웃된 uncached page: cached page 였다가 스왑 아웃된 uncached 페이지 중 익명 페이지들은 스왑 영역 안에 존재하게 된다. fi.. 2023. 12. 16.
PintOS | Project2. User Program | 시스템 콜 (프로세스 관련, 파일 관련) 실제 리눅스 환경에서 제공되는 시스템 콜의 종류는 다음과 같이 다양하다. 범주 설명 시스템 콜 프로세스 관리 프로세스 생성, 종료, 실행, 통신 등을 다룸 fork, exit, execve, wait, kill 파일 시스템 조작 파일 및 디렉토리 생성, 삭제, 읽기, 쓰기 등을 다룸 open, close, read, write, chmod 장치 관리 하드웨어 장치와의 상호작용 관련 기능을 다룸 ioctl, mmap 네트워크 관리 네트워크 통신 및 소켓 관리 관련 기능을 다룸 socket, bind, connect 메모리 관리 메모리 할당, 해제, 매핑 등을 다룸 brk, mmap, munmap 사용자 및 그룹 관리 사용자 및 그룹 식별, 관리 관련 기능을 다룸 getuid, setgid, getgid 시.. 2023. 12. 10.
PintOS | Project1. Threads | Advanced Scheduling (4.4 BSD) 핀토스 프로젝트에서는 4.4 BSD 스케줄러를 채택하고 있다. BSD는 Berkeley Software Distribution의 약자이고, UNIX의 한 버전인 4.4 BSD에서 사용되는 프로세스 스케줄러라고 한다. 앞서 공부했던 MLFQ 기반에서 변형된 버전이다. 이번 기록에서는 4.4 BSD를 구현하면서 이해한 바와 고민했던 내용들을 적어보는 시간을 가져보고자 한다. BSD의 스케줄링 철학 BSD 스케줄러의 핵심 철학은 다음과 같다. If the thread is nicer, lower the priority. If the thread have been using lots of CPU recently, lower the priority. For all threads, priority is recalc.. 2023. 12. 4.
운영체제 | CPU 스케줄링 알고리즘 | MLFQ 멀티 레벨 피드백 큐(MLFQ, Multi-level Feedback Queue) 우선순위 스케줄러의 발전된 형태 중 하나이며, Windows에서도 일부 채택되는 방식이다. (Linux는 현재 RB 트리를 활용하는 CFS(Completelty Fair Scheduler)를 사용한다고 한다.) MLFQ의 목표 두 가지 1. 반환 시간 최적화: 짧은 작업을 먼저 실행시킨다 2. 응답 시간 최적화: 대화형 사용자에게 응답이 빠른 시스템이라는 느낌 주기 근데 시스템은 작업의 실행 시간을 미리 알 수 없다. 따라서 핵심적인 질문은 다음과 같다: 작업의 실행 시간에 대한 선행 정보 없이 어떻게 위 목표를 달성할 수 있는가? MLFQ의 규칙 MLFQ는 여러 개의 큐로 구성되며, 각각 다른 우선순위(Priority l.. 2023. 11. 29.
운영체제 | CPU 스케줄링 알고리즘 | RR, SJF, STCF 협조적이든 비협조적이든 프로세스(쓰레드) 전환을 한다고 쳐. 그럼 지금 실행 중인 애는 ready list에 가겠지? 아니면 I/O 인터럽트로 blocked가 된다고 쳐. 이제 그 다음에 실행할 녀석을 어떻게 고르냐가 문제임. 무조건 ready list에 들어온대로 처리할까? 그것도 초기에 쓰였던 방법 중 하나임. FIFO 또는 FCFS(First Come First Serve)라고 불리는 방식. 이런 걸 스케줄링 알고리즘이라고 함. 어떻게 스케줄링을 할지에 대한 이야기. 스케줄링 평가 기준: 평균 반환시간 스케줄링의 평가 항목: 어떤 스케줄링 알고리즘이 얼마나 좋은지를 어떻게 평가할까? 기준은 두가지임. 1. 반환 시간(turnaround time): 작업 완료시간 - 시작시간 (대략 작업 리스트에 .. 2023. 11. 26.
운영체제 | 프로세스, 쓰레드의 상태와 생애주기 2023. 11. 24.
운영체제 | 프로세스(Process), 쓰레드(Thread) 프로세스, 쓰레드가 뭔가요? 프로세스: 프로세스는 실행 중인 프로그램의 인스턴스로, 독립적인 메모리 공간(가상 메모리)와 자원(파일 핸들, 네트워크 연결 등)을 가진다. OS가 프로세스의 생성 및 관리를 맡는다. 쓰레드: 쓰레드는 프로세스 내의 실행 흐름 단위로, 상위 프로세스의 자원과 메모리(코드, 데이터, 힙)를 공유한다. 각 쓰레드는 독립적인 스택 공간을 가지며, 멀티쓰레딩을 통해 프로세스 내에서 여러 작업을 동시에 수행할 수 있다. 프로세스(Process) 프로세스는 실행 중인 프로그램의 인스턴스라는 말은 다음과 같이 비유할 수 있다. 보조기억장치의 프로그램 실행 파일 = 설계도 보조기억장치의 실행 파일은 프로그램의 코드와 데이터를 포함하고 있다. 이 파일은 프로그램이 어떻게 동작해야 하는지에 대.. 2023. 11. 24.
PintOS | Project1. Threads | 과제 소개 PintOS 프로젝트는 매우 방대하다... 과제 설명서만 해도 몇 페이지지?? 하여간 엄청나게 많은 분량이다. 그래서 과제설명서 중 핵심 내용을 따로 모아놔야 할 것 같다. 앞서간 정글 선배님들 덕분에 한글 번역본을 구할 수 있었다.👍👍 감사합니다 잘 써먹겠습니다....! 테스트 방법 /PintOS_lab/threads/build 디렉토리에서 컴파일 및 채점을 실행한다. 전체를 컴파일하고 테스트하려면 make -> make check 여러 테스트 케이스들을 개별적으로 테스트하려면 예를 들어 alarm-multiple 이라는 테스트케이스를 수행하고 싶다면 make tests/threads/alarm-multiple.result 이 명령은 alarm-multiple 테스트를 수행하고, 결과를 .result .. 2023. 11. 24.