본문 바로가기
TIL/CS

[운영체제] 프로세스, 쓰레드

by sun_HY 2024. 3. 26.

프로세스

 

프로세스: 실행에 들어간 프로그램 (자원을 할당받아 동작 시작) (ex. 작업 관리자에서 프로세스들 볼 수 있음) 

프로세스의 동작: CPU가 그 프로세스들의 명령 실행

 

운영체제는 프로세스들이 CPU 배정받아 작업을 처리할 수 있도록 관리

 

프로세스는 "동작" 한다는 것이 가장 중요한 개념

 

 

프로세스의 구성

  • 메모리 구조: 프로그램 실행에 직접적으로 필요한 코드, 데이터
    • 코드 영역
      • 저장장치에 들어 있는 프로그램 자체
      • 실행이 되어야 하니까 어셈블리 형태의 코드들이 들어 있을 것임
    • 데이터 영역
      • 상수, 변수의 값 등 실행에 필요한 데이터
      • 코드 중에서 서브프로그램 호출 관련 내용이 있다면 들어 있음
        • 정적 데이터 영역
          • 상수, 항상 관리되어야 하는 변수 등
        • 스택 영역
          • 서브 프로그램, 그 안의 지역 변수 등
        • 힙 영역
          • 동적 변수들 중에서 사용자가 수동으로 할당하는 것들
  • 프로세스 제어 블록: 운영체제가 프로세스 관리를 위해 필요로 하는 정보
    • 운영체제가 프로세스를 관리하려면 코드와 데이터로는 부족하고 추가적인 정보가 필요함 > 그것이 프로세스 제어 블록
    • 프로세스 번호(PID, Process IDentification)
      • ex. 운영체제가 프로세스를 hwp.exe라는 이름 등으로 관리하기 어렵기 때문에 PID 부여해서 사용
    • 프로세스 상태
    • 프로그램 카운터(PC, Program Counter)
      • 현재 실행중인 명령어의 바로 다음 값이 위치를 가지고 있어야 함 (순서와 현재 처리 위치 구분, 제어의 흐름 관리)
    • 레지스터(cpu 내의 기억 장치)
    • 메모리 관리 정보
    • 프로세스 우선순위
    • 회계정보

 

저장장치에 들어 있던 파일 형태의 프로그램이 어떻게 동작을 하는가?

  • 메모리 공간을 할당받아 프로그램 올리고, 변수명 등 추가할 공간도 확보
  • CPU 자원을 할당 받아야지만 동작을 할 수 있다
  • 프로세스가 동작을 한다는 얘기는 CPU가 프로세스의 명령을 실행한다는 것 (그 행위 자체가 동작)
  • 정적이었던 프로그램이 메모리도 할당받고 CPU도 할당받아서 동작하는 과정

 

프로세스 상태 관리

  • 생성
    • 운영체제는 작업에 대한 프로세스 제어 블록 생성 후 작업 큐에 넣음
    • PID 할당, 상태정보 저장됨, 메모리 공간 할당받음, 실행에 필요한 데이터들도 준비됨
  • 준비
    • CPU 할당 기다리는 상태
  • 실행
    • CPU가 프로세스의 명령들 처리
    • 실행 상태에서 다른 프로세스 선택 시 준비상태로 전이
    • 실행 상태에서 입출력 요구 작업이나 페이지 교환 요구 작업 등 만나면 대기상태로 전이 (CPU 다른 프로세스에 할당하여 사용)
  • 대기
    • I/O 작업이 끝나거나 자원 할당 기다리는 상태 (재개 조건 만족 시 준비상태로 전이)
  • 종료
    • 프로세스가 모든 처리 완료
    • 강제 종료 포함
    • 운영체제가 자원 회수 

 

* dispatch: 프로세스에 CPU를 할당하는 과정

 

 

프로세스 생성

  • 프로세스 생성 시스템 호출 이용
  • 부모 프로세스: 시스템 호출 하는 프로세스
  • 자식 프로세스: 호출 통해 새로 생성된 프로세스
  • PID = fork();의 결과값: 자식의 PID를 받아옴
  • 자식의 경우는 0을 받아올 거니까 자식인지 부모인지 구분 가능
  • windows와 unix/linux의 프로세스 생성 방법 다름
  • 부모가 종료인데 자식이 아직 안 종료되어 있으면 운영체제가 찾아서 종료시킴

 

UNIX, Linux에서의 생성 시스템 호출

  • 자식 프로세스는 부모 프로세스의 복제본
  • 다른 프로그램 실행시키기 원하면 exec() 사용

 

Windows에서의 생성 시스템 호출

  • 처음부터 새로운 프로그램으로 자식 프로세스 생성

 

 

쓰레드

 

전통적인 프로세스는 프로세스 내에서 다중 처리 불가능

프로세스는 프로그램 실행의 단위 (자원 소유의 단위이기도, 디스패칭의 단위이기도 함)

최근에는 자원 소유의 단위는 프로세스, 디스패칭의 단위는 쓰레드로 둔다

 

각 쓰레드는 실행에 필요한 최소한의 정보만 가지고 나머지 정보는 프로세스에 둔다

쓰레드도 프로세스처럼 상태 정보 가짐

 

쓰레드를 프로세스 안에 둠으로서 단위가 쓰레드로 내려감

  • 새로운 디스패칭의 단위가 됨
  • 쓰레드별로 디스패칭 받아서 처리
  • PC 정보가 이제 쓰레드마다 있음
  • 쓰레드마다 실행하는 코드 위치가 다를 수 있음
  • 자원 소유의 단위는 동일하게 프로세스, 디스패칭의 단위는 쓰레드별
  • 쓰레드가 하나만 있는 프로세스는 전통적인 프로세스와 유사하다고 볼 수 있음

 

스택 부분만큼은 쓰레드가 별도로 관리

코드 영역은 공통, 어디를 볼지 쓰레드가 관리

728x90

'TIL > CS' 카테고리의 다른 글

[이산수학] 행렬(Matrix)  (1) 2024.04.27
[이산수학] 증명  (0) 2024.04.01
[이산수학] 논리  (0) 2024.03.22
디지털 논리 회로  (2) 2024.03.17
운영체제 1️⃣  (1) 2024.03.15