[운영체제] PCB & Process Status

James·2023년 6월 23일
0

운영체제

목록 보기
5/13
post-thumbnail

PCB(Process Control Block)


  • 커널 영역에 생성됨

PCB 생성 과정

프로그램 실행 → 프로세스 생성 → 프로세스 주소 공간에 (코드, 데이터, 스택) 생성 → 이 프로세스의 메타데이터들이 PCB에 저장

⇒ 프로세스 생성시 만들어지고, 실행이 끝나면 폐기됨

PCB 왜 필요한가?

  • CPU 자원은 한정적이다
    : 동시 사용할 수 없고 한정된 시간 만큼 이용하고, 타이머 인터럽트 발생시 차례를 양보한다. (운영체제는 인터럽트 기반)
  • CPU에서는 프로세스의 상태에 따라 교체 작업 이루어진다.
    :인터럽트가 발생해서 할당받은 프로세스가 wating 상태가 되고 다른 프로세스를 running으로 바꿔 올릴 때

    결론 : 앞으로 다시 수행할 대기 중인 프로세스에 관한 저장 값을 PCB에 저장해두는 것

PCB 어떻게 관리되나?

  • Linked List 방식으로 관리된다.

  • PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 삭제가 용이하다.

즉, 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.

수행중인 프로세스를 변경할때 CPU의 레지스터 정보가 변경되는 것을 Context Switching 이라고 한다.

PCB 구조

  • 프로세스의 상태정보를 저장해 놓은 구조체
  • 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조
  • Process Id : 프로세스의 고유 번호
  • Process State : ready, wait, running 등의 실행 상태
  • Program Counter(PC) : 프로그램 카운터, 다음 실행될 명령의 포인터
  • CPU registers : CPU 레지스터
  • CPU scheduling information : CPU 스케줄링 정보
  • Memory-management information : 할당된 자원 정보
  • Accounting information : CPU 사용시간 등
  • I/O status information : 입출력 상태 정보

Process Status (프로세스 상태)


  • new 상태: 프로세스가 이제 막 만들어진 상태, 메모리에 올라가기 전의 상태이다.
  • ready 상태: 프로세스가 메모리로 올라간 상태. CPU에 올라가기 전 상태이다.
  • running 상태ready 상태에서 dispatch(스케줄 이라고도 한다)가 되어 CPU를 할당받아 실제 수행되고 있는 상태를 말한다. 그런데 프로세스 하나가 CPU를 독점하는 것을 방지하기 위해, timeout을 시켜 강제로 다시 ready 상태로 돌아가게 할 수도 있다. 이를 선점(preemptive) 한다라고도 한다.
  • waiting 상태: I/O 또는 이벤트로 인해 잠시 대기상태로 전환된 상태이다. 이벤트가 종료되면, 프로세스는 다시 ready상태로 돌아간다.
  • terminated 상태running 상태인 프로그램이 종료되면 terminated 상태가 된다.
  • suspend 상태ready 상태나 waiting 상태인 프로세스를 메모리에서 내리는 것이다. running 상태에선 suspend 시킬 수 없고, ready가 suspend되면 suspend-ready라 하고, waiting 상태가 suspend 되면 suspend-wait 상태라 한다.
  • resumesuspend 상태에서 다시 메모리로 올라가는 것을 resume이라 한다.

Process 관련 system call


  • fork(): 새로운 프로세스 생성. 생성된 프로세스의 (pid)를 반환한다.
    • 부모 프로세스가 먼저 호출될지, 자식 프로세스가 먼저 실행될지 알 수 없다. 즉 ,Non-deterministic
  • wait(): 자식 프로세스가 끝날때까지 wait를 호출한 이후의 작업을 실행시키지 않는 system call. 즉, fork 함수를 deterministic하게 바꿔준다. 죽은 자식의 프로세스 pid를 반환한다.

Dispatcher (디스패쳐)

  • CPU 스케줄러 내부에 포함된 것으로, 단기 스케줄러가 선택한 프로세스에 실질적으로 프로세서를 할당하는 역할을 한다.
  • 프로세스의 레지스터를 적재하고(문맥교환), 운영체제 모드(Kernel Mode)에서 사용자 상태(User Mode)로 전환시켜주며 프로세스가 다시 시작할 때 사용자 프로그램이 올바른 위치를 찾을 수 있도록 한다. 👉🏻 dispatcher의 처리속도를 빠르면 빠를수록 좋다.

Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글