[OS] 프로세스와 PCB

parkheeddong·2023년 3월 14일
0

Operating System

목록 보기
9/63



1. 프로세스와 JOB의 차이

1) Job

시스템에 설치되어 있는 '실행파일'로서, 디스크에 정적으로 존재

액셀, 워드 등 설치된 어플리케이션을 'Application', 'Job'이라고 한다.
보조기억장치 공간을 사용하고 있을 뿐, CPU/IO 등 다른 자원을 사용하지 않는다.
실행되기 전의 '실행파일'

2) Process

(설치된 어플리케이션을 더블클릭 혹은 터치해서) 실행이 시작된 어플리케이션

실행을 시작하면 커널에 등록하면, 커널이 프로세스를 생성한다. 그러면 프로세스는 I/O 등 여러 각종 자원을 사용하기 시작한다.
application은 따로 관리될 필요가 없는데, 실행이 시작되어 '프로세스'가 되면 커널이 관리를 시작한다.



2. 모든 프로세스들이 갖는 Context

1) Program Code => Text

실행하는 프로그램 코드를 가진다.
보조기억장치에 저장된 Application의 코드를 가져온 것이다.

2) Global Data => Data

프로그램의 글로벌 변수 데이터를 가진다.

3) Temporary Data => Stack

모든 프로세스는 스택 영역을 가진다.
프로그램은 실행하면서 글로벌 변수 뿐 아니라 Local 변수들도 가지고 있는데,
이러한 지역 변수들은 스택에 저장된다. 함수에 전달되는 파라미터, return address 등 임시로 저장해야 하는 데이터들은 모두 스택에 저장된다.

4) Heap

모든 프로세스는 자기만의 힙 영역을 가지고 동적으로 할당한다.

5) Values of Processor registers including Program Counter and general registers

모든 프로세스는 cpu 안의 레지스터 공간을 가진다. 메모리 공간만 쓰는 것이 아니라 cpu 레지스터까지 사용해서 메모리 안 데이터를 레지스터에 갖다 놓고 사칙연산, 비교 등 다양한 처리를 한다.



3. 프로세스의 정의

1) 실행중인 프로그램 (Program in Execution)

*Execution과 Run은 다르다. Running 중인 프로그램은 실제로 CPU를 잡고 실행중인 것이고, Execution은 cpu를 꼭 사용하고 있지 않더랃 메모리에서 대기/입출력/네트워크 통해서 메시지 내보내기 등, 프로세스가 컴퓨터시스템 안에서 종료되지 않은 상태인 것을 의미한다.

2) 커널에 등록되어서 관리 받고 있는 entity

3) 컴퓨터 시스템의 자원을 요청하고, 사용할 수 있도록 허가를 받은 entity

(app의 상태로는 시스템 자원을 사용할 이유도, 사용할 수도 없음)

4) PCB를 할당받은 entity

5) active entity

능동적으로 움직이고 있는 entity.
프로세스는 생성되면 자기 코드를 메모리에 로딩해놓고 그 기계어 명령들을 능동적으로 실행해간다. 그 과정동안 시스템 자원의 요청, 할당, 반납 등을 하며 프로세스가 움직인다.

* '자원'(리소스)

자원은 스스로 움직이지 않는 수동적인 entity이다.
그저 프로세스에 의해 할당되고, 반납될 뿐이다.
어떠한 프로세스에게 할당되면, 프로세스가 하라는 대로 움직이는 것이다.



4. 컴퓨터 시스템 모델링

컴퓨터 시스템은 프로세스, 리소스(자원), 커널 총 3가지 Entity로 이뤄져 있다.
커널은 프로세스가 어떠한 자원을 사용하려고 할 때 사용가능한지 확인하고 허용하는 역할을 수행한다.
즉 컴퓨터 시스템은 Active한 프로세스, Passive 한 리소스, 그리고 이 둘 사이의 요청/할당/반납을 중재하는 커널로 이뤄져 있다.



5. PCB(Process Control Block)

1) PCB란

테이블 같은 일종의 자료구조이다.

프로세스는 모두 각각의 PCB를 가진다. 프로세스가 생성되면 커널 안에 자신의 PCB 영역이 생기고, PCB에는 프로세스에 대한 정보가 기록된다.

2) PCB에 저장되는 정보

(1) PID (Process Identification Number)

  • 프로세스의 아이디 넘버 (고유 번호)
  • 학생의 학번, 사람들 주민번호와 같은 것

(2) Process State

  • 프로세스의 상태 정보
  • 현재 대기중인지, cpu 사용중인지, 입출력 중인지 등

(3) Scheduling Information

  • 프로세스 우선순위(ex.6번, 15번..)

(4) Memory Management Information

  • 메모리 관리 정보.
  • 현재 메모리 공간 어디를 사용중인지
  • base/limit 레지스터, page table 등

(5) I/O Status Information

  • 현재 입출력 중이라면 어떤 디바이스 사용중인지, 어떤 파일을 사용중인지 등

(6) Accounting information

  • CPU를 지금까지 얼마나 사용했는지, 입출력은 총 몇번 했는지, 네트웍은 총 몇번 전송했는지 등

(7) Context Save Area

  • 그 프로세스가 실행할 때 cpu 레지스터에 가지고 있던 값을 임시로 저장하는 공간

3) 운영체제별 PCB

유닉스에서는 PCB를 'Process Table Slot' 과 'U-Area'로 부른다. (나눠서 저장)

리눅스에서는 PCB를 Process Descriptor라고 부른다. 리눅스에선 task_struct라는 구조로 저장되어 있다.

PCB는 운영체제마다 저장하는 정보가 다를 수도 있다.

시스템이 움직이면서 프로세스의 PCB에 접근하는 경우가 많기 때문에, PCB에 접근하는 속도는 매우 빨라야 하며 중요하다.

0개의 댓글