Operating Systems Three Easy Pieces
작성자: Remzi H. Arpaci-Dusseau, Andrea C. Arpaci-Dusseau · 2018 번역본을 참고하였습니다.
https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean
스터디 내용을 서술하되, 궁금하거나 다시 생각해볼 내용에 대해서 정리하고자 한다.
프로세스는 실행 중인 프로그램으로 정의한다. CPU를 가상화하여 하나의 프로세스를 실행하고, 얼마 후 중단시키고 다른 프로세스를 실행하는 작업을 반복하면서 하나의 CPU로 여러 개의 가상 CPU가 존재하는 것 처럼 한다.
시분할(time sharing) 기법으로 프로세스를 동시에 실행하는 것처럼 한다. CPU에서 프로그램 실행을 잠시 중한다고 다른 프로그램을 실행하는 것을 문맥교환(context switch)라고 함.
명령어는 메모리에 저장된다. 실행 프로그램이 Read/Write 데이터는 모두 메모리에 저장.
프로그램 카운터(program counter, PC): 프로그램의 어느 명령어가 실행 중인지를 알려준다.
프로그램 코드와 정적 데이터를 메모리에 탑재한다. 코드와 데이터의 늦은 탑재의 동작은 paging과 swapping의 이해가 필요하다. 스탭과 힙을 생성 및 초기화, 입출력 작업을 마치면 실행을 위한 준비가 완료된다.
그림을 보면서 코드와 정적 데이터가 힙에 가까워서 힙에 저장되는 줄 알았다. 그건 아니었고, 스택과 힙은 생성하고 초기화 된다. 메모리 4개 구역 코드, 데이터, 스택, 힙으로 공간이 할당되는 것 같다. (검색해도 잘 안나오는거 같음)
중단시키는 연산
실행 상태에서 입출력 시작 시 대기, 입출력 완료 시 준비, 준비에서 실행으로 스케줄 되지만, 실행에서는 준비로 스케줄 안 됨.
프로세스 제어 블럭(Process Control Block, PCB): 프로세스의 관리를 위한 정보를 저장하는 자료구조.
레지스터 문맥(register context): 프로세스가 중단 됐을 때 해당 프로세스의 레지스터 값을 저장하는 자료구조