프로세스란

Vorhandenheit ·2022년 3월 2일
0

Computer Science

목록 보기
5/6
post-custom-banner

프로세스

프로세스는 시스템 작업의 기본 단위로 모든 운영체재는 프로세스 개념을 바탕으로 동작합니다.
하나의 시스템은 사용자 코드를 실행하고 나머지는 운영체제 코드를 실행하는 프로세스들의 집합체 입니다. 프로세스란 실행 중인 프로그램입니다.

Program 과 Process

프로그램은 그저 하드 디스크에 저장되어있는 하나의 파일입니다. 그래서 프로그램 자체로는 아무것도 할 수 없습니다. 프로세스는 실행 중인 프로그램입니다.

(1) 프로세스 구조

프로세스는 각각 독립된 메모리 영역을 할당받습니다. 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있고 한 프로세스 다른 프로세스에 변수나 자료구조에 접근할 수 없습니다. 접근하려면 IPC를 사용해야합니다.

프로세스에 대한 정보는 프로세스 제어블록(PCB, Process Control Block)또는 프로세스 기술자라(PCB)고 부르는 자료구조에 저장됩니다.

  • PID : 운영체제가 각 프로세스를 식별하기 위해 부여된 프로세스 식별번호(PID, Process Identification)

  • PCB : 운영체제는 PCB를 프로세스에 대한 중요한 정보를 저장해놓을 수 있는 저장장소로 사용합니다.


- 프로세스 상태(Process State) : CPU프로세스를 빠르게 교체하면서 실행하기 떄문에 실행중인 프로세스도 있고 대기 중인 프로세스도있습니다. 그런 프로세스 '상태'를 저장합니다.
- 프로그램 카운터(Program counter) : CPU 다음으로 실행할 명령어를 가리키는 값입니다. CPU는 한 단위 씩 처리하는데 프로세스를 실행하기 위해 다음으로 실행할 기계어가 저장된 메모리 주소를 가리키는 값입니다.
- CPU 스케줄링 정보 : 프로세스 우선순위, 스케줄 큐에 대한 포인터, 다른 스케줄 매개변수 등이있습니다.
- 메모리 관리 정보 : 프로세스에 메모리를 할당합니다.
- 입출력 상태 정보 : 프로세스에 Device를 할당합니다.

프로세스 메모리

  • Text : 작성한 코드가 저장되는 영역

  • Data : 프로그램이 실행될 때 생성되고 프로그램이 종료되면서 시스팀에 반환되며 전역번수, 정정변수, 배열, 구조체 등이 저장됩니다. 이때 초기화된 데이터는 Data영역에 저장되고 초기화되지않은 데이터는 BSS(Black Stated Symbol)에 저장됩니다. 함수 내부에 선언된 Static변수는 프로그램이 실행될 때 공간만 할당되고 그 함수가 실행될 때 초기화 됩니다.

  • BSS(Black Stated Symbol) : 초기화 되지 않은 데이터가 저장되는 공간입니다. 반대로 초기화된 데이터는 Data영역에 잡히게 됩니다.

  • Heap : 메모리 동적으로 생성할 경우 Heap 메모리에 잡히게됩니다.

  • Stack : 지역변수 할당과 함수 호출시 전달되는 인자값, 리턴 어드레스로 저장하기 위한 공간입니다.

(2) 프로세스 상태 변화

  • new => ready : new 상태에서 프로세스가 생성되면 OS커널에 존재하는 Ready Queue에 올라가게됩니다.
  • ready => running : Ready Queue에 있는 프로세스들을 OS가 프로세스 스케쥴링 알고리즘에 의해 Running 상태로 가야할 프로세스에게 CPU를 할당합니다. 프로세스가 Running상태가 됩니다.
  • running => ready : 현재 running 상태에 있는 프로세스 A보다 Ready Queue에서 대기하고 있는 프로세스가 B가 우선순위가 높으면 , preemptive schedule(선점형인)인 경우 프로세스A는 Ready상태에 오게되고 프로세스가 B가 Running 상태가 되어 CPU를 할당받게 된다
  • running => blocked : 현재 running 상태에 있는 프로세스 A에게 입출력(I/O) 이벤트가 발생했을 때 프로세스 A가 blocked 상태로 가게됩니다
  • running => terminate : 프로세스 종료

상태

  • 생성(New)(생성 중) : 프로세스가 생성되었지만 실행가능한 프로세스 집합에 소속되지 못한 상태(프로그램이 메모리에 적재되지않은 상태)

  • 준비(Ready)(설정되어 대기 중) : CPU를 할당받기 위해 준비중인 상태(즉 Queue에서 대기하고 있는 상태를 의미합니다. 이는 물리적인 메모리에 적재된 상태를 말합니다)

  • 실행(Running)(실행하는 중) : 프로세스가 CPU를 할당받아 기계어 명렁어를 수행중인 상태

  • 대기(Block, wait, sleep)(어떤 사건이 발생하기 기다리는 상태) : 당장 CPU를 할당해줘도 instruction을 수행할 수 없는 상태를 말합니다. 디스크에서 file을 읽어와야 하는 오래 걸리는 작업을 하고 있거나 다른 프로세스의 진행을 위해 일부러 재워둔 경우에 해당합니다.

  • 종료(Exit)(실행 종료) : 프로세스가 종료되면 정리하는 작업을 진행하게 되는데 이 상태에 해당합니다.

(3) Process Scheduling

하드 디스크에는 수많은 프로그램이 있습니다. 이 중 일부만이 메인 메모리에 올라갈 수 있습니다.

하드웨어에 있는 프로그램을 JOB이라고 부릅니다. 메인 메모리에 올라가기전 Job Queue에서 대기합니다. 무엇을 먼저 메모리에 올릴지는 Job Scheduler가 결정합니다.

메인 메모리에 올라왔다고 바로 실행되는게 아니라 CPU서비스를 받기 위해서는 Ready Queue에서 대기합니다. Ready Queue에서 대기 중인 프로세스 중 무엇을 CPU 서비스를 받도록 결정하는게 CPU Scheduler입니다.

CPU 실행되다가 I/O가 필요한 경우 해당 I/O장치로 보내지는데, 이때 Device Queue에서 대기합니다. Device Queue에서 대기 중인 프로세스 가운데 어떤 것이 먼저 I/O를 받을 것인가 결정하는게 Device Scheduler 입니다

(4) Context Switch

프로세스의 문맥 교환, 실행 상태의 프로세스가 CPU할당 시간을 초과하여 준비 상태로 돌아가고, 새로운 프로세스가 실행 상태로 집입하기 위해선 각 프로세스의 정보를 저정하고, 복구하는 작업이 필요합니다. 이처럼 현재 실행 중인 프로세스의 정보를 PCB에 저장하고, 새로운 프로세스의 정보를 PCB로 복구하는 작업을 '문맥 교환'이라고 합니다.
문맥 교환이 완료가 되면 CPU는 커널모드에서 유저모드로 전환되고, PCB로부터 새로운 프로세스의 CPU 레지스터 값을 복구하여 실행합니다. 문맥 교환은 프소세스의 정보량, 메모리의 속도, 레지스터의 크기 등 하드웨어 환경에 따라 그 속도가 달라집니다.

P0가 실행 상태에 있다가 인터럽트 또는 시스템 호출로 인해 CPU가 실행을 중지하고, 운영체제가 P0의 정보를 PCB에 저장합니다. 그 다음으로 스케줄러에 의해 P1이 선택되면 P1을 실행하기 위해서 PCB로 정보를 복구합니다. 이후 CPU는 P1을 실행하다가 인터럽트 또는 시스템 호출이 발생하면 동일한 과정을 수행합니다

출처

https://kosaf04pyh.tistory.com/37
https://woovictory.github.io/2018/12/25/OS-Process/
https://bowbowbow.tistory.com/16
https://woo-dev.tistory.com/55
https://wisdom-and-record.tistory.com/85

profile
읽고 기록하고 고민하고 사용하고 개발하자!
post-custom-banner

0개의 댓글