본문 바로가기
우테코 자유테크 스터디/쉽게 배우는 운영체제

[OS] Ch.3 프로세스와 스레드

by ♡˖GYURI˖♡ 2024. 2. 15.

프로세스 개요

프로세스의 개념

프로그램 : 저장장치에 저장되어 있는 정적인 상태
프로세스 - PCB = 프로그램


프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
프로그램 + PCB = 프로세스

 

일괄 작업 방식

한 개가 끝나야 다음 것이 가능

 

시분할 방식

배분해서 여러가지 동시에 수행(현재 방식)

 

프로세스의 상태

  • 생성 상태
    프로그램 + PCB 한 상태. 이제 준비상태로 옮겨져 기다려야 한다.
  • 준비 상태
    실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태이다. 실행될 프로세스를 CPU 스케줄러가 선택한다.
  • 실행 상태
    선택된 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태이다. 프로세스 사이의 문맥 교환이 일어난다.
  • 대기 상태
    실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태이다. 입출력이 완료되면 준비 상태로 간다.
  • 완료 상태
    프로세스가 종료된 상태이다. 사용하던 모든 데이터가 정리된다. 정상 종료인 exit와 비정상 종료인 abort가 포함
  • 보류 상태
    프로세스가 메모리에서 잠시 쫒겨난 상태
    보류상태가 되는 경우
    • 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼때
    • 프로그램 오류가 있을 때
    • 바이러스 같은 공격을 하는 프로세스라고 판단 될때
    • 입출력이 계속 지연될 때 (아사현상)

 

프로세스 제어 블록과 문맥 교환

프로세스 제어 블록

프로세스 제어 블록 = 프로세스를 실행하는 필요한 중요한 정보를 보관하는 자료구조

 

PCB 구성

  • 포인터 : 준비 상태나 대기 상태의 큐를 구현할 때 포인터를 사용
    대기 상태에서 같은 입출력을 요구하는 프로세스끼리 모아둠
  • 프로세스 상태 : 현재 프로세스의 상태를 알려줌 ex) 생성, 준비, 실행 등
  • 프로세스 구분자 : 운영체제 내에 있는 여러프로세스를 구별하기 위한 구분자를 저장
  • 프로세스 카운터 : 다음에 실행된 명령어의 위치를 가르키는 프로그램 카운터의 값을 저장(다음 실행될 명령의 주소)
  • 프로세스 우선순위 : 프로세스의 실행순서를 경정하는 우선순위
  • 각종 레지스터 정보 : 자신이 사용했던 레지스터의 중간값
  • 메모리 관리 정보 : 프로세스가 메모리의 어디 있는지 주소값, 경계 레지스터 값,한계 레지스터 값
  • 할당된 자원 정보 : 사용하는 입출력자 원이나 오픈 파일 등에 대한 정보
  • 계정 정보 : 계정번호, CPU 할당 시간, CPU 사용 시간
  • 부모프로세스 구분자(PPID)와 자식프로세스 구분자(CPID)

 

문맥교환

문맥교환 : CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아 들이는 작업

 

프로세스의 연산

프로세스의 구조

  • 코드 영역
    프로그램의 본문이 기술된 곳(읽기)
  • 데이터 영역
    코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳(읽기/쓰기)
  • 스택 영역
    운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳(숨겨져 있음)

 

프로세스의 생성과 복사

fork()

실행중인 프로세스와 똑같은 프로세스가 하나 더 만들어진다.
fork()를 호출하면 프로세스 구분자, 메모리 관련정보, 부모프로세스 구분자와 자식프로세스 구분자가 바뀜
장점 : 프로세스 생성 속도가 빠름, 추가 작업없이 자원 상속, 시스템 관리 효율적이다.'

 

exec()

기존의 프로세스를 새로운 프로세스로 전환하는 함수(재사용)
exec()를 호출하면 프로세스 구분자, 부모 자식 프로세스, 메모리 관련 사항 등은 변하지 않지만 프로그램 카운터 레지스터 값을 비롯한 각종 레지스터와 사용한 파일 정보가 모두 리셋된다.
프로세스가 종료된 후 부모 프로세스로 돌아올 수 있다.

 

프로세스의 계층 구조 장점

여러작업을 동시에 처리할 수 있게 하고
프로세스 재사용이 용이하게 하고
자원회수가 쉽다.

 

미아 프로세스

회수 되지 않고 낭비된 프로세스
c언어의 exit() 또는 return()문은 자식 프로세스가 작업을 끝났음을 부모 프로세스에게 알리는 것으로 미아 프로세스를 미연에 방지한다.
os 운영에 효율성을 떨어트린다.

 

스레드

스레드 정의

CPU 스케줄러가 CPU에 전달하는 일 하나
프로세스의 코드에 정의된 절차에 따라 CPU작업 요철을 하는 실행 단위
처리 > 프로세스 > 스레드

 

프로세스와 스레드의 차이

프로세스끼리는 약하게 연결되있는 반면 스레드끼리는 강하게 연결되어 있다.

  • 멀티 스레드
    프로세스 내 작업을 여러 개의 스레드를 분할함으로써 작업의 부담을 줄이는 프로세스 운영기법
  • 멀티 태스킹(fork)
    운영체제가 CPU 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
  • 멀티프로세싱
    CPU 를 여러개 사용하여 여러 개의 스레드를 동시에 처리하는 기법(슈퍼스칼라 기법)
  • CPU 멀티 스레드
    하나의 CPU에서 여러 스레드를 동시에 처리하는 기법(파이프라인 기법)

 

멀티스레드 장점

  • 응답성 향상
  • 자원 공유
  • 효율성 향상
  • 다중 CPU 지원

 

멀티스레드 단점

멀티 스레드는 자원 할당의 효율화를 불러오지만
시스템에 오류가 생길 경우 프로그램 전체에 오류가 발생

 

멀티스레드 모델

커널 스레드 : 커널이 직접 생성하고 관리 하는 스레드
사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드

 

사용자 레벨 스레드
사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결되어 라이브러리가 스케줄링을 하고 작업에 필요한 정보를 처리하기 위해 문맥교환이 필요x(공유 x)

 

커널 레벨 스레드
하나의 스레드가 하나의 커널 스레드에 연결되어 있는 형식
독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 계속 작업 가능
문맥교환을 해 느리게 작동

 

멀티레벨 스테드
최근 OS가 사용하는 스레드로 사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식
커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자가 레벨 스레드보다 유연하게 작업을 처리 할 수있다.