My Profile Photo

DongChanS's blog


수학과 학생의 개발일지


OS 5 - Process Control

위 포스트는 udacity의 Introduce to Operating Systems by Geogia Tech 를 참고하였습니다.

추가로 이 곳 을 참고하였습니다.

1) Process Control

이전 시간에 OS가 프로세스의 virtual address를 중요도에 따라서 disk와 memory에 맵핑을 해준다고 배웠습니다. 그래서 그 중요도를 알려면 프로세스가 일단 뭘 하고 있는지를 알아야합니다. 이번에는 OS가 프로세스의 정보를 가져오는 방법에 대해서 알아보도록 하겠습니다.

1. Process Execution State

Application 내에서 소스코드가 실행되기 위해서 바이너리로 컴파일되는데,

이런 바이너리 코드들은 순차적으로 실행되는게 아니며(함수, 루프, 점프 등등..)

함수를 실행하고 난 뒤에 다시 제 위치로 돌아와야합니다.

  1. Program Counter(PC)

    현재 프로세스가 어떤 위치의 Instruction sequence을 실행하고 있는지 CPU가 알아야 하는데,

    Program Counter는 프로세스가 레지스터 내에서 실행되는 동안 cpu 위에 남아있습니다.

    이는 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정합니다.

    • 레지스터 : CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 공간. 연산 제어, 디버깅의 목적으로 활용됨.

      CPU 입장에서 RAM보다 더 가까이 있는 저장소이므로, 매우 속도가 빠릅니다.

    레지스터에는 address, status information… 과 같은 process의 상태들을 저장합니다.

  2. Process Stack

    • Stack Pointer 를 통해서 조종함.
  3. 기타 유용한 정보들..

=> 각각의 Process 마다 이런 정보들을 OS가 PCB(Process Control Block)에 저장합니다.

2. Process control block

PCB

  1. OS가 관리하는 프로세스에 대한 정보를 저장하는 Data Structure

  2. 저장하는 값들

    ex) Process State : Stack pointer, PC

    Register 값들

    Memory mapping

    list of open file, information for CPU scheduling, process priorify …

  3. 프로세스가 생성될 때 같이 생성됨.

    • 자주 변하는 field

      ex) Program counter : 프로세스가 연산을 실행할때마다 바뀜

      -> 그러나 OS가 그때마다 일일이 값을 쓰는건 너무 비효율적이기 때문에 CPU 전용 레지스터(비서)가 존재해서 현재 Process를 탐색하여 PC register가 자동으로 업데이트되게 함.

      ex)

    • 자주 변하지 않는 field

      ex) Memory 요구 -> OS가 메모리를 할당함 -> Virtual address에 추가적인 맵핑을 함. -> memory limit도 변함.

3. How is a PCB Used?

Example)

  • OS가 두 프로세스 P1, P2를 관리함

  • P1과 P2의 PCB는 메모리에 저장되어있음.

  1. P1 : Running

    • Process는 CPU 위에서 작동함

    • CPU의 register는 P1의 state를 기록함 => 이것들은 PCB에 기록될 것임.

  2. P1 -> P2, P1 : idle

    • OS는 P1의 모든 State information과 CPU register의 정보들을 모두

      P1의 PCB에 저장함.

    • P2의 PCB값들을 전부 가지고 와서 CPU register에 대응시킴

    • 만약 추가적인 Physical memory가 필요하다면)

      1. malloc call
      2. OS가 메모리를 할당함
      3. 새로운 physical memory를 virtual memory와 맵핑시킴
      4. 이런 맵핑정보(PCB는 memory mapping 정보를 담당함)를 업데이트함.
  3. P2 -> P1

    • 위에서 저장했던 P1의 PCB를 참고하여 이전에 중지되었던 P1의 위치로 다시 되돌아옴.

이러한 프로세스간의 스왑을 Context switch라고 부릅니다.

4. What is a Context Switch?

OS 가 CPU 공유하는 프로세스들을 스왑하는 과정에 대해 살펴보았다.

PCB들은 메모리에 상주해있으면서, CPU 레지스터의 값은 어떤 프로세스가 현재 실행중이냐에 따라 바뀐다.

  1. Context Switch

    OS에 의해서 실행되는 메커니즘의 일부로서,

    switching the cpu from the context of one process to the context of another

  2. Context Swtich은 비싸다!

    1. Direct costs : 메모리에 있는 각 PCB의 값들을 레지스터에 많은 비용이 든다.

    2. Indirect costs: 프로세스가 CPU에서 실행되는 동안에 여러 데이터를 캐시에 저장한다.

      많은 데이터가 캐시 구조에 들어가게되면서 점차 캐시의 심층부에 저장되게 되며, 심층부에 있는 캐시들은 가져오는데 비용이 많이 든다.

    3. Accessing this cash »» Accessing memory

      캐시가 물리적으로 가까이 있기 때문에 한 100배정도 빠르다!

      1. Cache is hot

        우리가 필요로 하는 데이터(실행중인 프로세스 관련 데이터)가 캐시에 있는 경우

      2. Cache is cold (cache misses)

        Context Swtich를 통해서 실행중인 프로세스가 바뀌게 되면,

        캐시 공간을 확보하기 위해서 기존에 담았던 다른 프로세스에 대한 정보를 메모리에 이동시켜줘야함.

        => 그러다보니 다시 원래 Process로 스위칭을 하면 데이터가 캐시에 없기 때문에 메모리에서 일일이 가지고 와야하는데 굉장히 느리다. 이것을 cache cold라고 부릅니다.

=> 이러한 작업을 자주 하는 것이 비효율적이다 보니, Context Switch를 하는 횟수를 제한해버린다.

comments powered by Disqus