3강-1. Process1
PC register가 code의 어느 부분을 가리키고 있다. (실행해야 할 instruction 위치)
ALU : 산술 논리 장치
프로세스는 실행 중인 프로그램을 의미한다.
사용자 프로그램이 할 수 없는 일을 운영체제에게 요청을 할 때(system call), 그러면 PC ( 프로그램 카운터)가 커널의 code 영역을 가리키면서 cpu가 작업을 실행한다.
커널 주소공간에서 커널 스택에서 프로세스마다 별도로 두고 있다.!-> 데이터가 꼬이는 것을 방지하기 위해!!
Ready : 다른 모든 준비는 완료, cpu만 얻으면 instruction을 실행가능
cpu는 하나씩 프로세스를 실행한다.
Process state : 프로세스의 상태 -> running , block , ready...
Process ID : 사람 주민번호라고 생각해라
scheduling information, priority : process에게 cpu를 주기 위해서는 스케쥴링, 우선순위를 알아야 한다. --> 운영체제가 프로세스를 관리하기 위한 정보이다.
프로세스 A가 cpu를 빼앗길 때, 그동안 했던 작업 기록( 레지스터 값, pc , memory map 등등)을 프로세스 A의 PCB에 저장한다.
프로세스 B가 cpu를 얻었을 때, 과거에 cpu를 넘겨줄 때, 저장한 기록(즉, cpu를 받았을 때 일을 재개하기 위한 정보[레지스터, pc, memory map] == 프로세스의 문맥 )을 PCB에서 찾아서 하드웨어로 복원한다.
주의! : 사용자 프로그램에서 운영체제로 cpu의 제어권이 넘어가는 것은 문맥 교환이 아니다.
ISR = Interrupt Service Routine
근데 운영체제가 interrupt or i/o 요청 system call를 요청한 프로세스에게 cpu제어권을 넘겨주지 않고 다른 프로세스에게 cpu제어권을 넘겨준다면 이건 문맥 교환이다.
(1) 번 상황 : 커널 모드에서 다시 사용자 프로세스 A로 cpu 제어권이 넘어가는데 cpu context를 저장했던 것을 다시 복원만 할 뿐. 캐시 메모리는 삭제하지 않아서 문맥 교환이 없으므로 오버헤드가 크지는 않다.
(2) 번 상황 : Timer interrupt는 cpu의 제어권을 다른 프로그램에게 넘기기 위한 의도를 가진 인터럽트이다. 문맥교환이 일어나게 되면 캐시 메모리를 다 지워버려야 함. ===> cache memory flush는 상당한 오버헤드이다.
fork a child : 자식 프로세스를 만듦.
Multiprogramming은 메모리에 여러 프로그램이 올라가는 것을 의미한다.
degree of Multiprogramming : 메모리에 올라가 있는 프로그램의 수를 의미한다.
메모리에 너무 많은 프로그램이 올라가도 성능이 안 좋아짐. 메모리에 너무 적은 프로그램이 올라가도 성능이 안 좋아진다.
중기 스케줄러가 지금 컴퓨터에서 쓰는 방식.
blocked와 suspended 차이를 잘 구분해라
위에서 말한 외부는 중기 스케줄러를 의미한다.
사람이 직접 프로그램을 suspended 할 수 있다.(사람이 다시 resume 해서 재개시켜 주면 됨)
suspended를 하면 메모리를 잃어버리는 것이다.
monitor mode(kernal mode)에서는 사용자 프로세스가 커널모드에서 running 하고 있다. ( 운영체제가 커널에서 running 하고 있다는 말은 잘못된 생각이다. 운영체제가 running 하고 있다는 것은 여기서는 생각하지 않는다.)