[운영 체제] Chapter 3 | Process 1

피망이·2024년 1월 29일

프로세스의 개념

  • CPU의 수행 상태를 나타내는 하드웨어의 문맥(context)

    • 현재 시점에 어떤 instruction을 수행하고 있는가?
      • Program Counter가 어디를 가리키고 있는가?
      • register가 어떤 값을 갖고 있었는가?
  • 프로세스의 주소 공간 code, data, stack에 무엇을 쌓아두고 있는가?

  • 프로세스 관련 커널 구조

    • Process Control Block(PCB) : 관리 시스템
    • Kernel stack : 여러 프로세스들이 별도로 두고 있는 커널 속 주소 공간

프로세스의 상태(Process State)

  • 컴퓨터 안의 CPU는 하나 뿐(이라고 가정)

    • Running
      : CPU를 잡고 instruction을 수행중인 상태

    • Ready
      : CPU를 기다리는 상태(메모리는 할당된 상태)

    • Blocked(wait, sleep) → 돌아갈 수 있음(activity)
      : CPU를 얻어도 당장 instruction을 수행할 수 없는 상태
      : 오래 걸리는 작업을 진행할 때(I/O 작업을 많이 하는)

    • Suspended(stopped) → 저절로 돌아갈 수 없음(nonactivity), 사람이 돌려야!
      : 외부적인 이유로 프로세스의 수행이 정지된 상태(ctrl+z = break)
      : 프로세스는 통째로 디스크에 swap out 된다.

  • CPU 안에는 Running 상태에 있는 process가 하나 존재한다.

    • 다 끝나면 Ready queue의 마지막에 들어간다.
  • Disk나 keyboard의 I/O queue에 process가 줄을 서면,

    • CPU의 작업이 끝난 후에 Blocked된 상태를 Ready 상태로 변경하여 수행한다.

  • 핵심 : data 영역에 자료 구조로 queue를 만들어놓고, Ready 상태에 있는 process는 CPU를 주고 Blocked 상태에 있는 process는 CPU를 주지 않는 방식으로 운영한다.

Process Control Block(PCB)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보
    1. OS가 관리상 사용하는 정보
      • Process state, Process ID
      • Scheduling Information, priority(선입선출 보다는 우선 순위에 따라 처리함)
    2. CPU 수행 관련 하드웨어 값
      • Program counter, registers
    3. 메모리 관련
      • Code, data, stack의 위치 정보
    4. 파일 관련
      • Open file descriptors...

문맥 교환(Context Switch)

  • CPU가 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다.

    • 다른 프로세스로 넘어갈 때 커널의 PCB에 저장한다.
    • 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다.
  • System call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아니다.

    • System call은 프로세스가 직접 CPU에게 중단할 것을 요청하는 것이고, 문맥 교환은 다음 프로세스를 사용하기 위해 context의 일부를 PCB에 save하는 과정이다.

Ready Queue와 Device Queue

  • Ready Queue에서 대기하고 있다가 PCB를 줄세우는 과정이다.

  • 프로그램이 시작되면 ready queue에서 대기한다.
    • CPU를 사용하다가 I/O request와 같은 오래 걸리는 작업이 수행되면 queue에 다시 줄 선다.
    • Interrupt가 발생하면 ready queue로 들어가게 되는 것은 아니다!(오른쪽 아래 오류)

스케줄러(Scheduler)

  • Short-term scheduler(단기 스케줄러 or CPU scheduler)

    • 어떤 프로세스를 다음 번에 running시킬지 결정한다.
  • Long-term scheduler(장기 스케줄러 or Job scheduler)

    • 프로세스에 memory를 주는 문제를 관리한다.
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정한다.
    • degree of Multiprogramming을 제어 : 너무 많아도 너무 적어도 안 된다!
    • 보통은 없음 = 곧바로 메모리로 올려놓는다!
  • Medium-term scheduler(중기 스케줄러 or Swapper)

    • 현재의 시스템들은 장기 스케줄러가 없다.
    • 프로그램이 시작되면 무조건 메모리는 주는 대신, 너무 많이 올라갈 때만 조절한다.
    • degree of Multiprogramming을 제어하여 프로그램 성능이 좋아지게 만드는 역할이다.

프로세스 상태도

  • User mode에서 Running 되고 있다가 System call이나 interrupt가 들어 오면,

    • 운영 체제의 커널 mode(moniter mode)에서 running하고 있다고 본다.
  • Blocked 상태에서 Suspended / Ready 상태에서 Suspended 되었을 때가 다르다.


profile
물리학 전공자의 프로그래밍 도전기

0개의 댓글