카테고리 없음

운영체제 2강 :: 프로세스, 쓰레드

HJPlumtree 2023. 3. 29. 18:27

운영체제에서 기억하고 싶은 내용

 

 

프로세스(Process)

실행 중인 프로그램

프로그램 자체는 정지된 녀석인데, 프로세스는 동작 하는 능동적 개체

 

 

어떻게 정적인 프로그램이 동작을 하는 프로세스가 되나?

운영체제한테 자원을 할당 받아 동작한다

  • 받는 자원: CPU, 메모리, 입출력장치, 파일 등
  • 동작: CPU가 프로세스의 명령 실행

 

 

프로세스의 구성 1 : 메모리 구조

실행에 필요한 코드와 데이터

  • 코드 영역: 프로그램 자체
  • 데이터 영역: 프로그램 실행시 필요한 데이터(상수, 변수, 서브프로그램 호출상태 등)

데이터 영역 3가지로 나뉜다

  • 정적 데이터 영역
  • 스택 영역
  • 힙 영역

 

프로세스 구성 2 : 프로세스 제어 블록(PCB: Process Control Block)

운영체제가 프로세스 관리를 위한 정보가 저장되어 있다

프로세스 번호(PID), 프로세스 상태, 프로그램 카운터(PC), 레지스터 ... 등

각 프로세스마다 PCB가 존재한다

 

 

프로세스의 상태

생성

  • 처음 작업이 시스템에 주어진 상태
  • PCB를 만들어준다

 

준비

  • CPU 할당을 기다리는 상태

 

실행

  • 프로세스가 처리되는 상태

 

대기

  • 특정 자원을 할당 받을 때까지 보류되는 상태
  • 예시) 입출력(I/O) 작업이 끝날 때까지

 

종료

  • 프로세스가 더 이상 실행되지 않도록 끝난 상태

 

 

프로세스 상태 변화

  • 생성 -> 준비
  • 준비 -> 실행: 디스패치(CPU 할당)
  • 실행 -> 준비: 준비 큐로 돌아감
  • 실행 -> 대기: 이벤트 대기
  • 대기 -> 준비: 재개 조건 만족되면
  • 실행 -> 종료: 실행이 끝나면, 에러 나면, 부모 프로세스에서 멈추라고 할 때

 

 

부모 - 자식 프로세스

프로세스 생성 시스템 호출로 한 프로세스가 다른 프로세스 생성 가능

 

 

프로세스 생성 시스템 호출(UNIX, Linus 명령어)

fork()

부모 프로세스를 복제해서 자식 프로세스 만드는 것

다 똑같은데 PID만 다르다

 

exec()

부모 프로세스와 다른 자식 프로그램 실행

PID만 같고 나머지는 다르다

 

 

프로세스 생성 시스템 호출(Windows)

CreateProcess()

새로운 프로그램으로 자식 프로세스 생성

 

 

쓰레드(Thread)

  • 프로세스 안에서 다중처리를 위해 나온 개념
  • 하나의 프로그램을 실행하기 위한 기본적인 단위가 되었고
  • 디스패칭의 단위
  • 하나의 프로세스에서 쓰레드 하나 이상 존재 가능

 

 

쓰레드에 포함된 것

실행에 필요한 최소한 정보만 갖는다

  • PC를 포함한 레지스터
  • 상태 정보
  • 스택 영역

 

 

다중 쓰레드가 왜 좋을까?

단순히 생각해서 다중 쓰레드로 효율적인 처리 가능