본문 바로가기
운영체제

스레드/프로세스 차이

by 흰색남자 2022. 11. 22.

 

  1. 프로세스란?
  • “실행가능한” 프로그램이 CPU에게 특정한 자원할당 알고리즘(CPU스케쥴링)에 따라 자원을 할당받아 실행된 형태.
  • 프로세스의 종류는 부모/자식 프로세스가 존재함
  • 프로세스의 ID는 PID ( Process Identification )라 부름.

프로그램이 프로세스가 되는 과정??

https://cinrueom.tistory.com/40

  1. 메모리에 프로그램이 올라감.
  2. 메모리상에 존재하는 명령어를 cpu로 가져오는 작업을 한다
  3. 명령어를 CU가 해성함.
  4. 해석된 명령어를 ALU가 수행함.
  5. 그렇다면 부모와 자식 프로세스는 무슨 차이인가?
  • 부모 프로세스는 fork() 명령을 통해 자식 프로세스를 생성함.
  • 모든 프로세스는 1번 프로세스 ( init 프로세스 )가 fork() 명령어를 통해 생성됨. << 여기서 생성된 프로세스의 PPID는 1임 ( 부모의 PID를 가르킴 )
  • init 프로세스에 의해 생성된 프로세스도 자식 프로세스를 생성할 수 있음. << 여기서 생성된 프로세스의 PPID는 부모 PID, 예를들면 119, 120 등 다양한 id가 존재하는 것을 볼 수 있음.
  • 부모와 자식 프로세스는 병렬로 실행됨 // 당연한 말임
  • 프로세스 간에는 직접적으로 영향을 주지 않으나, IPC를 통해 자원을 공유할 수 있음.
  • PIPE, Named PIPE, MQ, Shared Memory 등.

여기서 부모 프로세스가 죽으면?

  • 고아 프로세스가 됨. 부모가 없음.
  • 고아 프로세스가 되면 PPID는 init 프로세스의 id가 됨(1)
  • 고아 프로세스는 프로세스 자신이 시스템의 자원을 낭비할 수 있고, 시스템이 프로세스가 종료될 때까지 추적을 해야 하기 때문에 성능 저하의 원인이 됨
  • 일반적으로 부모 프로세스는 자식 프로세스가 종료될때까지 기다림. 파이썬에서는 join이었는데 다른 언어에선 모르겠음.

좀비 프로세스.

  1. 프로그램이 종료됐는데, 부모 프로세스가 종료된 자식 프로세스의 자원을 회수하지 않은 형태.
  2. 좀비 프로세스는 자식의 정보가 담긴 최소한의 정보 ( PID, STATUS 등)만 남겨있음.
  3. 한정된 PID의 양을 갉아먹는 존재.
  4. 다른 프로세스 실행에 방해가 될 수 있다고 함.

쓰레드란?

  1. 프로세스의 실행 단위임.
  2. 프로세스의 쓰레드와 CPU의 코어의 쓰레드와 다른가?

개념은 비슷함. CPU에서는 하나의 코어에서 할 수 있는 작업의 개수를 의미하고, 프로세스에서는 프로세스에서 실행되는 작업의 단위를 의미함.

  1. 프로세스에서 작업을 실행하면 쓰레드가 생성되어 CPU 코어의 쓰레드라는 작업공간을 할당받아 실행됨.

프로세스의 메모리 구조는

Heap, stack, data, code로 이루어짐.

code : 작성한 코드가 들어있음. 읽기만 가능한 영역임. 자바에서는 method area가 같은 역할을 함

data : static, global 등 프로그램이 사용하는 데이터 공간

// BSS : 초기값 없는 global, static

heap : 동적으로 사용되는 영역이며, malloc으로 할당함.

      프로그래머가 사용되는 공간임.

       자바에서는 객체의 인스턴스가 만들어지면 여기 할당됨.

stack : primitive type의 변수, 함수의 수행의 마치고 복귀할 주소, 함수 인자 값 등이 저장됨. // 이것도 자바의 stack이랑 같음

프로세스는 PCB라는 블록에 상태 정보를 저장함.

https://dev-mystory.tistory.com/119

PCB에는 프로세스의 주소공간, PC, SP, 상태, ID 등 다양한 정보를 저장함.

PC ( 프로그램 카운터 ) : 다음 명령어의 주소를 저장하는 제어 레지스터임.

뭘 실행해야하는지

SP ( 스택 포인터 ) : 프로세스의 스택의 위치 정보를 나타내는 데이터 레지스터.

어디까지 실행됐는지…

  • 레지스터는 cpu안에 존재하는 휘발성 메모리 공간임.
  • 캐시보다 빠름. 레지스터 > 캐시 > 메모리 >>>>>디스크

캐시 VS 레지스터

공통점 : 명령이나 데이터를 저장함

차이

  1. 캐시는 램과 CPU간의 속도 차이를 완화시키기 위한 것
  2. 레지스터는 CPU 안에서 연산을 처리하기 위한 것.

PCB에 포함되는 정보

  • (1) Process ID : 프로세스를 구분하는 ID
  • (2) Process State : 각 State 들의 상태를 저장한다.
  • (3) Program Counter : 다음 Instruction 의 주소를 저장하는 카운터. CPU는 이 값을 통해 Process 의 Instruction 을 수행한다.
  • (4) Register : Accumulator, CPU Register, General Register 등을 포함한다.
  • (5) CPU Scheduling Information : 우선 순위, 최종 실행시간, CPU 점유시간 등이 포함(*)**된다.
  • (6) Memory Information : 해당 프로세스 주소공간(lower bound ~ upper bound) 정보를 저장.
  • (7) Process Information(페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등)
  • (8) Device I/O Status(프로세스에 할당된 입출력 장치 목록, 열린 팔린 목록 등)
  • (9) Pointer : 부모/자식 프로세스에 대한 포인터자원에 대한 포인터 등
  • (10) Open File List : 프로세스를 위해 열려있는 파일의 리스트

'운영체제' 카테고리의 다른 글

리눅스 운영체제 커널 파해치기 (1)  (1) 2022.12.25
부모, 자식 프로세스, 쓰레드와 코어  (1) 2022.11.21
캐시 종류  (0) 2022.10.19
스토리지  (0) 2022.10.18
리눅스/파일 디스크립터  (0) 2022.10.14