운영체제 Chapter 3. 프로세스와 스레드

Jene Hojin Choi·2022년 5월 5일
0

Operating System

목록 보기
3/4
post-thumbnail

아래 내용은 운영체제 | 그림으로 배우는 구조와 원리 를 읽고 정리한 내용입니다.

Chapter 3. 프로세스와 스레드

01. 프로세스의 개념과 상태 변화

1. 프로세스의 개념

프로세스: 실행 중인 프로그램 / 메모리 구조를 이루고, 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 개체

아래 사진은 프로세스의 일반적인 메모리 구조이다.

  • 스택 (stack): 데이터를 일시적으로 저장하는 영역
    • 지역 변수에 사용하고, 변수가 범위 밖이면 공간을 해제
  • 힙 (heap): 코드 영역과는 별도로 유지되는 자유 영역
    • 동적으로 메모리를 할당하기 위해 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 사용
  • 데이터: 프로그램의 가상 주소 공간
  • 코드: 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역

프로세스의 종류

구분종류설명
역할시스템 (커널) 프로세스모든 시스템 메모리와 프로세서의 명령에 접근함.
프로세스 실행 순서를 제어하거나 커널 영역을 침범하지 못하게 감시하고, 사용자 프로세스를 생성하는 기능을 수행
사용자 프로세스사용자 코드를 수행
병행 수행 방법독립 프로세스다른 프로세스에 영향을 주거나 받지 않으면서 수행하는 병행 프로세스
협력 프로세스다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스

2. 프로세스의 상태변화와 정보

프로세스의 상태는 크게 두가지로 나뉠 수 있다: 실행 상태, 비실행 상태

프로세스 제어 블록

  • 특정 프로세스 정보를 저장하는 데이터를 블록이나 레코드
  • 운영체제가 프로세스를 제어할 때 필요한 상태 정보를 저장
  • 프로세스 식별자, 상태, 카운터, 레지스터 저장 영역, 프로세스 스케줄링 정보, 계정 정보등이 있음

프로세스의 문맥 교환 (Context switching)

  • 인터럽트나 시스템 호출 등으로 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것

02. 프로세스의 관리

1. 프로세스의 구조

부모 프로세스: 프로세스를 새로 생성하는 프로세스
자식 (서브) 프로세스: 생성되는 프로세스

2. 프로세스의 생성

  1. 새로운 프로세스에 프로세스 식별자를 할당
  2. 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 프로세스 제어 블록을 할당
  3. 프로세스 제어 블록 초기화
  4. 링크를 건다 (해당 큐에 삽입)

3. 프로세스의 종료

부모 프로세스는 다음 상황에서 자식 프로세스를 종료시킬 수 있다.

  • 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때
  • 자식 프로세스에 할당된 작업이 거의 없을 때

다음과 같은 방법으로 프로세스를 종료할 수 있다.

  • 정상 종료
  • 시간 초과
  • 실패
  • 여러 오류 (산술 오류, 보호 오류, 데이터 오류)
  • 메모리 부족, 액세스 위반 등

4. 프로세스의 제거

프로세스 제거 = 프로세스 파괴

  • 사용하던 자원을 시스템에 반환
  • 프로세스 제어 블록 회수
  • 부모 프로세스가 제거되면 자식 프로세스도 제거됨

5. 프로세스의 중단과 재시작

프로세스의 준비, 실행, 대기 상태만 이용한다면 시스템이 대부분 유휴 상태가 됨.

유휴 상태: CPU의 처리 시간과 입/출력 장치에서의 처리 시간 차이로 CPU를 사용할 수 있는 상태임에도 CPU가 작업을 하지 않고 쉬고 있는 시간

이는 프로세스 중단 상태를 이용하여 해결 가능

  • 시스템 전체의 부하를 증가시키지 않고 프로세스에 서비스 재공 가능
  • 대기 상태가 되면서 해당 이벤트가 발생할 때 즉시 실행 상태로 바꿀 수 있음

프로세스 중단과 재시작은 다음과 같은 상황에 발생

  • 시스템 장애 → 중단 → 기능 회복 → 재시작
  • 프로세스에 의심스러운 부분이 있으면 중단 → 확인 → 재시작/종료
  • 처리할 적업이 너무 많아서 시스템에 부담이 되면 몇개 중단 후 재시작
    • 장시간 중단할 때에는 해당 프로세스에 할당된 자원 반환
      • 메인 메모리는 바로 반환
      • 보조 메모리는 중단 시간을 예측할 수 없거나 너무 길때 반환

6. 프로세스의 우선순위 변경

프로세스 스케줄러는 블록에 있는 우선순위를 이용하여 준비 리스트의 프로세스를 처리:

  • 프로세서 중심 프로세스
    • 프로세서를 길게 사용 대신 사용 횟수를 줄임
  • 입출력 중심 프로세스
    • 프로세서를 짧게 자주 사용

7. 프로세스의 문맥 교환

프로세스 외부에서 이벤트가 일어나면 인터럽트 발생

  • 입출력 인터럽트
    • 입출력 동작이 발생했음을 확인하고 이벤트를 기다리는 프로세스를 준비 상태로 바꾼 후 실행할 프로세스를 결정함
  • 클록 인터럽트
    • 현재 실행 중인 프로세스의 할당 시간을 조사하여 실행 중인 프로세스를 준비 상태로 바꾼 후 다른 프로세스를 실행 상태로 바꿈

인터럽트가 발생하면 운영 체제가 다른 프로세스를 실행 상태로 바꾸고 제어를 넘겨주면 프로세스 문맥 교환 발생

프로세스 문맥 교환: 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하여 프로세스 교환

03. 스레드의 개념과 상태 변화

1. 스레드의 개념

스레드: 프로세스 내에서 실행되는 여러 흐름의 단위

  • 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유
  • 같은 프로세스의 스레드들은 동일한 주소 공간 공유

프로세스 하나에 포함된 스레드들은 병렬 수행함 = 서로 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행 가능

병렬 수행의 장점

  • 사용자 응답성 증가
  • 프로세스의 자원과 메모리 공유 가능
  • 경계성이 좋음
  • 다중 처리로 성능과 효율 향상

2. 단일 스레드와 다중 (멀티) 스레드

3. 스레드의 사용 예

다중 스레드를 이용한 워드 편집기 프로세스

  • 사용자의 키 입력에 응답하는 스레드
  • 이미지나 텍스트를 보여주는 스레드
  • 지정된 시간에 디스크에 저장하는 정기적 백업 스레드

웹 브라우저

  • 이미지나 텍스트를 로딩하는 스레드
  • 네트워크에 연결하는 스레드
  • 사용자와 상호작용하는 스레드

4. 스레드의 상태 변화

5. 스레드의 제어 블록

  • 프로세스는 스레드를 한개 이상 가질 수 있음
  • 프로세스 제어 블록 = 스레드 제어 블록의 리스트

04. 스레드의 구현

스레드 구현 방법에 따른 구분

  • 사용자 수준 스레드
    • 사용자 영역의 스레드 라이브러리로 구현
    • 스레드와 관련된 모든 행위를 사용자 영역에서 하므로 커널이 스레드의 존재를 모름
    • 다수의 사용자 수준 스레드가 커널 수준 스레드 한개에 매핑 (다대일)
    • 장단점
      • 장점
        • 이식성이 높음
        • 오버헤드가 적음
        • 유연한 스케줄링 가능
      • 단점
        • 시스템의 동시성을 지원하지 않음
        • 확장에 제약이 따름
        • 스레드 간 보호 불가능
  • 커널 수준 스레드
    • 커널이 스레드와 관련된 모든 작업 관리
    • 스레드 병행 수행 가능 & 스레드가 대기 상태가 될 시 다른 스레드로 교환 가능
    • 사용자 수준 스레드와 커널 수준 스레드 한개씩 매핑 (일대일)
    • 장단점
      • 장점
        • 시스템 동시성 지원
      • 단점
        • 오버헤드 증가
  • 혼합형 스레드
    • 사용자 수준 프로세스는 커널 수준 스레드와 다대다 매핑
      • 사용자 수준 프로세스는 커널 수준 스레드와 비슷한 경량 프로세스에 n:m 매핑
      • 경량 수준 프로세스는 커널 수준 스레드와 1:1 매핑

0개의 댓글