이 포스팅은 Operating Systems: Three Easy Pieces, Remzi H. Arpaci-Dusseau & Andrea C. Arpaci-Dusseau을 읽고 개인 학습용으로 정리한 글입니다.
여러 프로세스가 실행 준비 상태에 있고 운영체제는 그들을 전환하면서 실행
-> ex. 한 프로세스가 입출력을 실행하면, CPU는 다른 프로세스로 전환
-> CPU 이용률 증가 -> 효율성 개선이 중요
많은 사용자가 동시에 컴퓨터를 사용하고, 현재 실행 중인 작업으로부터 즉시 응답을 원함
-> 대화식 이용(interactivity)의 개념이 중요
시분할의 구현:
세 개의 프로세스(A, B, C), 각 프로세스는 512KB 메모리에서 각기 작은 부분을 할당받음
-> 하나의 CPU를 가정할 때, 운영체제는 실행할 한 개의 프로세스를 선택
-> 다른 프로세스들은 준비 큐에서 실행을 기다린다
여러 프로그램이 메모리에 동시에 존재하려면 보호(protection)가 중요
-> 한 프로세스가 다른 프로세스의 메모리를 읽거나 쓸 수 있는 상황 X
- 주소 공간(address space): 실행 중인 프로그램이 가정하는 메모리의 모습 (abstraction)
주소 공간은 실행 프로그램의 모든 메모리 상태를 갖고 있다
-> 코드(code, 명령어)
-> 스택: 함수 호출 체인 상의 현재 위치, 지역 변구, 함수 인자와 반환값 등 저장
-> 힙: 동적으로 할당되는 메모리를 위해 사용
주소 공간 구성 요소에는 정적으로 초기화된 변수 등의 다른 것들도 있지만, 현재로선 코드, 스택, 힙 세 가지만 있다고 가정한다
주소 공간의 맨 아래에 위치, 위쪽 방향으로 확장
ex. 사용자가 프로시저를 호출할 때
스택과 힙의 이러한 배치는 관례적임
-> 원한다면 주소 공간을 다른 방식으로 배치할 수 있다
주소 공간에 여러 스레드가 공존할 때는 이런 식으로 주소 공간을 나눌 수 없다
실제로 프로그램이 물리 주소 0~16KB 사이에 존재하는 것은 아니다.
-> 실제로는 임의의 물리 주소에 탑재된다.
-> 그러나, 실행 중인 프로그램은 자신이 특정 주소의 메모리에 탑재되고 매우 큰 주소 공간을 가지고 있다고 생각한다
ex. 프로세스 A가 주소 0(가상 주소)으로부터 load 연산을 한다
-> 운영체제는 HW의 지원을 통해 물리 주소 0이 아니라 A가 탑재된 메모리의 물리주소를 읽도록 보장해야한다
운영체제는 가상화가 시간적 공간적 측면에서 효율적이도록 해야
-> 시간적: 프로그램이 너무 느리게 실행되면 안됨
-> 공간적: 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해선 안됨
효율적인 가상화를 위해, 운영체제는 TLB등의 하드웨어 기능을 포함하여 HW의 지원을 받아야
운영체제는 프로세스를 다른 프로세스로부터 보호해야 & 운영체제 자신도 프로세스로부터 보호해야
-> 프로세스가 탑재/저장/명령어 반입 등을 실행할 때 다른 프로세스/운영체제의 메모리 내용에 접근하거나 영향을 줄 수 있으면 X
즉, 자신의 주소 공간 밖의 어느 것도 접근할 수 있어서는 안됨
= 프로세스들을 서로 고립(isolate)