cs/운영체제

3강-1. Process1

Tomato_Coffee 2023. 11. 3. 09:05

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 하고 있다는 것은 여기서는 생각하지 않는다.)

running을 2가지로 나누어 둠