KOCW 반효경 교수님 운영체제 강의와 도서를 정리한 내용입니다.
프로그램 구조
메모리 주소 영역은 크게 code, data, stack 세 가지로 구분된다.
코드 영역은 기계어 instruction이 보관되는 공간이다.
데이터 영역에는 프로그램이 사용하는 데이터, 예를 들면 전역 변수 등이 저장되어 있다.
스택 영역은 함수 호출 시 해당 함수가 실행을 완료하고 돌아갈 주소와 데이터를 임시로 보관하는 곳이다. (참고로, 스택에는 스레드 정보도 저장될 수 있다.)
스택(Stack) vs 프로세스 제어 블록(PCB) ?
스택도 프로세스 제어 블록(PCB)과 비슷한 역할을 수행한다. 두 개념의 차이점은 어떤 상황에서 호출되느냐에 있다. 프로그램 내에서 발생하는 일반 함수 호출의 경우, 복귀 주소가 스택에저장된다.
반면, 인터럽트가 발생하여 CPU의 프로그램 카운터가 커널 영역으로 이동해야 하는 경우, PCB에 저장한다. 프로그램 카운터가 메모리 영역 중 커널 영역을 가리키고 있다면, 이를 커널 모드(kernel mode)라고 부른다. 프로그램이 커널 모드인지 아닌지는 CPU의 모드 비트로 저장된다.
추가로, PCB는 커널의 데이터 영역에 자료구조로 구현되어 있다.
커널의 메모리 주소 공간
사용자 프로그램 A가 시스템 호출을 통해 커널 모드로 전환한다고 가정해보자. 그러면 먼저 PCB에 사용자 프로그램 A의 문맥(레지스터 데이터, 복귀 주소)를 저장하고, 프로그램 카운터(PC)는 커널 주소 공간을 가리키게 된다.
커널 모드에서 또 다른 함수를 호출하게 되면 복귀 주소를 어디에 저장해야 할까? 바로 커널 주소 공간의 스택에 저장하게 된다.
커널의 스택은 프로세스별로 별도로 제공되는데, 이는 일관성을 유지하기 위함이다. (멀티프로세스 상황에서, 프로그램 A와 B가 모두 커널 모드에서 함수를 호출하는 상황을 생각해 보면, 구별 없이 스택에 쌓는다면 혼잡해질 것이 예상된다.)
입출력(IO) 디바이스 인터럽트 처리 루틴
- 사용자 프로그램이 키보드 입력(IO 디바이스)이 필요하다. 보안 상의 이유로 입출력 장치에 사용자 프로그램이 직접 접근할 수 없다. 따라서 시스템 콜을 통해 커널 모드로 전환한다.
- PCB에 실행 중인 사용자 프로그램에 대한 정보를 저장한다.
- 커널 모드의 CPU는 IO 컨트롤러에게 키보드로부터 데이터를 읽어와 임시 버퍼에 저장하게 한다.
- 입출력 작업이 완료되면 컨트롤러가 CPU에
인터럽트 라인
을 만들어 입출력 완료되었음을 알린다.cpu는 다시 작업 큐에 넣는다.
ready queue 내부 모습
큐헤더가 존재하고 PCB가 포인터로 다음을 이어주는 linked list
로 구현되어 있음을 확인할 수 있다.
'💻Computer Science > Operating System' 카테고리의 다른 글
[OS] 프로세스 동기화 (0) | 2023.07.25 |
---|---|
[OS] CPU 스케줄링 (0) | 2023.07.25 |
[OS] 컴퓨터 시스템의 동작 원리 (0) | 2023.07.25 |
[OS] 디스크 관리 (0) | 2023.07.08 |
[OS] file system (0) | 2023.07.07 |