CS/운영체제

Chapter 3: 프로세스와 스레드

GaeunLee 2022. 3. 29. 23:48

3.1 프로세스란 무엇일까?

프로세스란

  • 프로세스 = 잡 = 태스크 =/= 스레드!
  • CPU 할당받게 되는 단위 & 자신에게 주어진 자원들의 소유자
  • 수행중인 프로그램
    • 수행 중 ⇒ 프로그램, 데이터, 환경 포함 (실행, 보류 모두 포함)
    • 프로그램과 데이터를 기본으로 정상적인 실행을 위해 필요한 환경을 시스템에서 부여받은 능동적인 존재

 

+)프로세서는 하드웨어를 의미 (CPU)

 

프로세스 제어 블록

프로세스에 대한 모든 정보를 가진 자료구조

  • 프로세스번호 (PID)
  • 상태(status)
  • 프로그램 우선순위
  • 프로그램 카운터 (PC)
  • 메모리 포인터 = 메모리의 자리, 시작 주소
  • 문맥 데이터 = 인터럽트 발생시 문맥교환하기위한
  • 파일들의 정보
  • 계정정보
  • 입출력 정보

 

프로세스의 상태 변화

  • 보류 상태가 필요한 이유
    • 보류 준비 = 메모리의 여유X, 새로 생성된 프로세스에게 반드시 메모리 주어야 한다면, 보류해야 한다.
    • 보류 대기 = 전부 대기 상태의 프로세스면 CPU가 일이 없어지므로, 보류 대기하고 새로운 프로세스를 메모리에 올린다.
  • 스와핑
    • swap in = 다시 메모리로 돌아옴
    • swap out = 메모리공간을 뺏김

 

  • 보류대기 ⇒ 대기
    • 보류 대기에 있는 프로세스가 보류 준비에 있는 프로세스보다 우선순위가 높을 때 불필요한 스와핑을 막기위해 바로 대기로 간다.

 

  • 문맥 교환
    • 모드 스위칭 = 인터럽트 처리 전후의 프로세스가 같은 경우
      • 문맥교환을 위해 필요한 일의 양이 적음
      • ex) 입출력 완료 인터럽트
    • 프로세스 스위칭 = 인터럽트 처리 전후의 프로세스가 달라지는 경우
      • 문맥교환을 위해 필요한 일의 양이 많음
      • ex) 시간 종료 인터럽트, 입출력요청

 

3.2 스레드란?

  1. 스레드 = 프로세스 내의 세분된 작은 일
    • 다중 스레딩 = 하나의 프로세스를 다수의 스레드로 만들어 실행하는 것
    • 동일 프로세스 내의 스레드들은 자원을 공유한다
    • 동일 프로세스 내의 스레드 통신은 커널의 개입이 필요하지 않다(사용자)
  2. 스레드의 상태와 동기화
    • 프로세스와 마찬가지로 실행, 준비, 대기와 같은 상태를 가짐
    • 특정 스레드 내의 변경이 다른 스레드에 영향을 미친다
  3. 스레드의 종류
    • 사용자 레벨 스레드
      • 스레드 라이브러리(응용프로그램)이 스레드의 모든 것을 관리
      • OS(커널)는 스레드의 존재를 모름, OS는 프로세스 까지만 관리
      • 특정 스레드 실행중 대기 = 소속 프로세스 대기
      • 특정 스레드 실행중 시간초과 = 프로세스 스위칭
      • 스레드 간의 스위칭은 운영체제가 정한 스케줄링을 따를 필요가 없다 (독자적인 스케줄링)
      • 단점
        1. 특정 스레드의 대기 = 모든 스레드의 대기
        2. 스레드 다중처리 불가
    • 커널 레벨 스레드
      • 모든 스레드의 관리를 커널이 하는 경우
      • 다중처리 환경일 때, 한 프로세스 내의 다수 스레드는 각각 처리기를 할당받아 병렬 실행
      • 한 스레드의 대기 같은 프로세스내의 다른 스레드 스위칭이 가능
      • 같은 프로세스 스레드 스위칭에도 커널이 개입(모드스위칭 요구)

 

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

Chapter 7: 메모리 관리  (0) 2022.05.09
Chapter 6: 교착 상태(Dead Lock)  (0) 2022.05.05
Chapter 5: 병행 프로세스와 동기화  (0) 2022.05.03
Chapter 4: CPU 스케줄링  (0) 2022.04.04
Chapter 1,2: OS와 인터럽트  (0) 2022.03.28