[운영체제] Chapter3. 프로세스와 스레드

DongHyeon·2022년 7월 30일
0

운영체제

목록 보기
3/8

Chater3. 프로세스와 스레드


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


1-1 프로세스의 개념

  • 다중 프로그래밍 환경에서 여러 프로그램을 메모리에 적재하여 병행 실행하는 방법을 통해 효율을 높일 수 있는데, 병행 실행하는 프로그램들은 컴퓨터 자원을 공유하므로 이를 제어하는 방법이 필요하여 프로세스가 등장하게 된다.

  • 프로세스란

    • 실행 중인 프로그램
    • 비동기적 행위
    • 실행 중인 프로시저
    • 실행 중인 프로시저의 제어 추적
    • 운영체제에 들어 있는 프로세스 제어 블록
    • 프로세서에 할당하여 실행할 수 있는 개체 디스패치가 가능한 대상
  • 프로세스가 실행중인 프로그램이 되기 위해서는 점 유시간, 메모리, 파일 입출력장치 같은 자원이 필요하고, 프로세스를 생성하거나 실행할 때 이 자원을 할당한다. 또한 프로그램 카운터, 프로세서의 현재 활동(레지스터 내용)도 포함한다.

  • 프로세스 구조

    • 스택
      • 데이터를 일시적으로 저장하는 영역
      • 지역변수에 사용, 변수가 범위 밖으로 이동하면 공간을 해제
      • 호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용, 함수를 호출할수록 커지고 반환하면 줄어듦
      • 힙과 인접한 방향으로 커져 스택 포인터와 힙 포인터가 만나면 메모리 소진을 의미
      • 코드 영역과는 별도로 유지되는 자유 영역
      • 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용
      • 프로세스의 공유 라이브러리와 동적으로 적재된 모듈이 서로 공유하는데, 동적 메모리 할당이 발생하면 보통 위쪽으로 비대해짐
    • 데이터
      • 프로그램의 가상 주소 공간, 전역변수나 정적변수를 저장하거나 할당하고 실행하기 전에 초기화한다.
      • 읽기 전용 영역, 읽기와 쓰기 영역으로 초기화 가능
    • 코드
      • 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역
      • 프로그램을 시작할 때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장
      • 프로세스로 변경할 수 없고, 읽기 전용이므로 프로그램이 코드 영역을 침범하여 쓰기를 시도하면 오류가 발생하여 프로그램을 종료한다.
      • 공유가 가능한 영역
  • 프로세스의 종류

    • 시스템(커널) 프로세스 : 모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스, 프로세스 실행 순서를 제어하거나 다른 사용자 및 커널 영역을 치멈하지 못하게 감시하고, 사용자 프로세스를 생성하는 기능 수행
    • 사용자 프로세스 : 사용자 코드를 수행하는 프로세스
    • 독립 프로세스 : 다른 프로세스에 영향을 주지 않거나 받지 않으면서 수행하는 병행 프로세스
    • 협력 프로세스 : 다른 프로세스와 영향을 주고 받는 병행 프로세스

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


2-1 프로세스의 상태 변화

  • 프로세스의 상태는 크게 실행 상태와 비실행 상태로 구분

  • 운영체제가 프로세스를 생성하면 비실행 상태로 초기화해서 실행을 대기

  • 실행 중인 프로세스를 종료 혹은 인터럽트가 발생하면 비실행 프로세스 중에서 선택한 프로세스를 실행 상태로 바꾼다(디스패치). 이때 인터럽트된 프로세스는 비실행 상태가 된다.

  • 실행 중인 프로세스는 새로운 자원을 할당받기 위해 프로세서를 기다리는 비실행 상태로 바뀌기도 한다.

  • 프로세스의 상태 변화 과정

    1. 준비 => 실행

      • 준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것을 디스패치라 한다.
      • 다중 프로그래밍 운영체제에서 실행 상태인 프로세스가 할당된 시간만큼만 프로세서를 사용하도록 하여 특정 프로세스가 프로세서를 독점하는 것을 방지
    2. 실행 => 준비

      • 운영체제는 실행 상태의 프로세스가 프로세서를 계속 독점하지 않도록 인터럽트 클록을 두어 특정 프로세스가 할당된 시간 동안만 프로세서를 점유하게 한다.
      • 타임아웃 이후에도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제에 프로세서 제어권을 부여
      • 이후, 실행 상태의 프로세스는 준비 상태가 되고, 준비 리스트의 첫 번째 프로세스가 실행상태가 됨
    3. 실행 => 대기(보류)

      • 할당된 시간 이전에 실행 상태의 프로세스에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제로 프로세서를 스스로 양도하면 대기 상태가 됨
    4. 대기 => 준비

      • 프로세스는 입출력 작업이 끝나면 깨움으로 대기에서 준비 상태가 된다

2-2 프로세스 제어 블록

  • 운영체제가 프로세스를 제어할 때 필요한 프로세스 상태 정보는 프로세스 제어 블록에 저장
  • 프로세스 제어 블록(PCB)은 특정 프로세스 정보를 저장하는 데이터 블로기ㅇ나 레코드로, 작업 제어 블록이라고도 한다.
  • 프로세스가 생성되면 메모리에 제어 블록을 생성하고, 프로세스가 실행을 종료하면 해당 프로세스 제어 블록도 삭제
  • 프로세스 식별자, 프로세스 상태, 프로그램 카운터, 레지스터 저장 영역, 프로세서 스케줄링 정보, 계정 정보, 입출력 상태 정보 등

2-3 프로세스의 문맥 교환

  • 인터럽트나 시스템 호출 등으로 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것
  • 문맥 교환이 일어나면 프로세서의 레지스터에 있던 내용을 나중에 사용할 수 있도록 저장

3 프로세스의 관리


3-1 프로세스의 구조

  • 프로세스는 실행 중에 프로세스 생성 시스템을 호출하여 새로운 프로세스를 생성할 수 있다. 이 때, 프로세스 생성 순서를 저장하고 부모-자식 관계를 유지하여 계층적으로 생성하며 이 과정을 반복하여 계층 구조를 형성

3-2 프로세스의 생성

  • 프로세스 생성 세부 작업 단계
    1. 새로운 프로세스에 프로세스 식별자를 할당
    2. 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 프로세스 제어 블록 공간 할당
    3. 프로세스 제어 블록 초기화. 프로세스 상태, 프로그램 카운터 등 초기화, 자원 요청, 프로세스 제어 정보 등을 포함
    4. 링크를 건다(큐에 삽입)

3-3 프로세스의 종료

  • 프로세스가 마지막 명령을 실행하면 종료하여 운영체제에 프로세스의 삭제를 요청
  • 종료의 종류에는 정상 종료, 시간 초과, 실패, 오류, 메모리 부족 등이 있음.

3-4 프로세스의 제거

  • 프로세스를 파괴하는 것
  • 사용하던 자원을 시스템에 돌려주고, 해당 프로세스는 시스템 리스트나 테이블에서 사라져 프로세스 제어 블록을 회수. 하지만 프로그램은 디스크에 계속해서 저장

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

  • 시스템의 유휴시간 문제를 프로세스 중단 상태를 이용하여 해결가능
  • 운영 체제는 새로운 프로세스를 생성하여 실행하거나 실행 중인 프로세스를 중단했다가 다시 실행하여 사용 가능
  • 프로세스를 중단한 원일을 제거하여 다시 실행하는 것을 재시작이라 함

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

  • 프로세스 스케줄러는 프로세스 제어 블록에 있는 우선순위를 이용하여 준비리스트의 프로세스를 처리
  • 준비 리스트의 프로세스
    • 입출력 중심 프로세스 : 속도가 느리면서 빠른 응답을 요구하는 단말기 입출력 프로세스에 높은 우선순위를 부여하고, 속도가 빠른 디스크 입출력 프로세스에는 낮은 우선순위 부여. 우선순위가 높은 프로세스에 시간을 적게 할당
    • 프로세서 중심 프로세스 : 프로세서를 길게 사용하되 사용 횟수를 줄여서 균형 유지

3-7 프로세스의 문맥 교환

  • 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하여 프로세스를 교환하는 과정을 문맥교환이라 함
  • 문맥 교환은 시간 비용이 들어가는 오버헤드

4 스레드의 개념과 상태 변화


4-1 스레드의 개념

  • 프로세스는 자원과 제어로 두 가지 특성으로 구분
  • 이 중 제어만 분리한 실행 단위를 스레드라 한다(하나의 프로세스는 하나 이상의 스레드로 나눌 수 있음)
  • 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유
  • ex) 프로그램 카운터, 스택 포인터, 실행 환경 정보, 지역 데이터, 스택 등
  • 스레드는 보통 다른 프로시저를 호출하고 다른 실행을 기록하기 때문에 별도의 스택이 필요하고, 프로그램 카운터가 독립적이라서 같은 프로세스의 스레드들이 동시에 코드의 동일한 부분이나 다른 부분을 실행할 수 있다.
  • 스레드의 사용 장점
    • 사용자 응답성 증가
    • 프로세스의 자원과 메모리 공유 가능
    • 경제성
    • 다중 처리로 성능과 효율 향상

4-2 단일 스레드와 다중 스레드

  • 운영체제는 단일 프로세스에서 스레드 실행을 지원(단일, 다중)
  • 모든 스레드는 해당 프로세스의 자원을 공유하고, 같은 주소 공간에 있고, 동일한 데이터에 접근하므로 스레드 한 개가 전역 데이터를 변경하면 다른 스레드도 이 데이터에 접근하여 변경 내용을 확인할 수 있다(읽기 권한 포함)
  • 위의 특성으로 인해 프로세스보다 스레드를 생성하는 것이 빠르고, 동일한 프로세스에 있는 스레드 간의 교환이나 스레드 종료도 훨씬 빠름
  • 프로세스보다 동일한 프로세스의 스레드에 프로세서를 할당하거나 스레드 간 문맥 교환을 하는것이 훨씬 경제적

4-3 스레드 사용 예

  • 워드 편집기, 데이터 베이스 등

4-4 스레드의 상태 변화

  • 프로세스를 생성하면 해당 프로세스의 스레드도 함께 생성
  • 스레드는 프로세스와 달리 각각의 스레드가 독립적이지 않음

4-5 스레드의 제어 블록

  • 실행 상태, 스케줄링 정보, 계정 정보, 스케쥴링 큐용 다양한 포인터, 프로세스 제어 블록 포함 포인터 등을 저장

5 스레드의 구현

  • 스레드의 형태
    • 사용자 수준 스레드(n:1 매핑)
      • 장점 : 이식성이 높음, 오버헤드가 적음, 유연한 스케줄링이 가능
      • 단점 : 시스템의 동시성을 지원하지 않음, 확장에 제약에 따름, 스레드 간 보호 불가능
    • 커널 수준 스레드(1:1 매핑)
      • 커널이 스레드와 관련된 모든 작업 관리
      • 동일한 프로세스에 있는 스레드 중 한 개가 대기상태가 되더라도 다른 스레드를 실행 할수 있음
    • 혼합형 스레드(n:m매핑)
      • 사용자 수준 스레드와 커널 수준 스레드를 혼합한 구조

0개의 댓글