프로세스와 스레드

Moom2n·2024년 4월 17일
0

CS

목록 보기
11/11
  • 프로세스 : 컴퓨터에서 실행되고 있는 프로그램
  • 스레드 : 프로세스 내 작업의 흐름

1. 프로세스와 컴파일 과정

  • 프로세스 : 프로그램으로부터 인스턴스화 된것

  • 프로그램 : 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행 될수 있는 파일이 되는 것

전처리

  • 소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환

컴파일러

  • 오류처리, 코드 최적화 작업을 하며 어셈블리어로 변환

어셈블러

  • 목적 코드로 변환됨 test.o

링커

  • 프로그램 내의 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합해 실행파일을 만듦

정적 라이브러리

  • 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식
  • 외부 의존도가 낮으며 메모리 효율성이 떨어짐

동적 라이브러리

  • 프로그램 실행시 필요할 때만 DLL 이라는 함수 정보를 통해 참조하는 방식
  • 외부 의존도가 높으나, 메모리 효율성이 높음

2. 프로세스의 상태

생성 상태 (CREATE)

  • 프로세스가 생성된 상태 fork() 또는 exec() 함수
  • PCB 가 할당됨

fork()

  • 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수
  • 주소 공간만 복사할 뿐, 부모 프로세스의 비동기 작업 등을 상속하지는 않음

exec()

  • 새롭게 프로세스 생성

대기상태 (READY)

  • 메모리 공간이 충분하면 메모리를 할당받고, 아니면 아닌 상태로 대기
  • CPU 스케줄러로부터 CPU 소유권이 넘어오길 기다림

대기 중단 상태 (READY SUSPENDED)

  • 메모리 부족으로 일시 중단된 상태

실행 상태 (RUNNING)

  • CPU 소유권과 메모리를 할당받고 인스트럭션을 수행중인 상태
  • CPU burst

중단 상태 (BLOCKED)

  • 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태
  • I/O 디바이스에 의한 인터럽트

일시 중단 상태 (BLOCKED SUSPENDED)

  • 중단된 상태에서 프로세스가 실행되려 했으나, 메모리 부족으로 일시 중단된 상태

종료 상태 (TERMINATED)

  • 메모리와 CPU 소유권을 모두 놓고 가는 상태

3. 프로세스의 메모리 구조

스택

  • 지역변수, 매개변수, 함수 저장
  • 컴파일 시 크기 결정됨
  • 동적으로 크기가 늘어날 수 있음

  • 동적 할당 시 사용됨
  • 런타임 시 크기 결정됨
  • 벡터 같은 동적 배열은 힙에 동적 할당

데이터 영역

  • 전역변수, 정적변수 저장
  • BSS 영역 : 초기화가 되지 않은 변수가 0으로 초기화되어 저장
  • Data 영역 : 0이 아닌 다른 값으로 할당된 변수들이 저장

코드 영역

  • 소스 코드가 저장
  • 수정 불가능한 기계어로 저장되어 있음

4. PCB (Process Control Block)

  • 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터
  • 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리됨

PCB 의 구조

  • 프로세스 스케줄링 상태 : '준비', '일시중단' 등 프로세스가 CPU에 대한 소유권을 얻은 이후의 상태
  • 프로세스 ID : PID, 해당 프로세스의 자식 프로세스 ID
  • 프로세스 권한 : 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
  • 프로그램 카운터 : 프로세스에서 실행해야할 다음 명령어의 주소에 대한 포인터
  • CPU 레지스터 : 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
  • CPU 스케줄링 정보 : CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
  • 계정 정보 : 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
  • I/O 상태 정보 : 프로세스에 할당된 I/O 디바이스 목록

컨텍스트 스위칭

  • PCB를 교환하는 과정

  • 프로세스 A가 실행하다 멈추고, 프로세스 A 의 PCB를 저장하고 다시 프로세스 B를 로드하여 실행, 그리고 다시 프로세스 A의 PCB를 로드

캐시미스

  • 컨텍스트 스위칭 발생 시 캐시클리어 과정 겪게됨
  • 이로 인한 캐시 미스 발생

스레드에서의 컨텍스트 스위칭

  • 스택 영역을 제외한 모든 메모리 공유
  • 스레드 컨텍스트 스위칭의 경우 비용&시간이 더 적음

5. 멀티프로세싱

  • 멀티프로세스를 통해 하나 이상의 일을 병렬로 처리 가능

웹 브라우저

  • 브라우저 프로세스 : 주소 표시줄, 북마크 막대, 뒤로가기 버튼, 앞으로가기 버튼 등을 담당하며 네트워크 요청이나 파일 접근 같은 권한 담당
  • 렌더러 프로세스 : 웹사이트가 '보이는' 부분의 모든 것 제어
  • 플러그인 프로세스 : 웹 사이트에서 이용하는 플러그인 제어
  • GPU 프로세스 : GPU 이용해 화면 그리는 부분 제어

IPC (Inter Process Communication)

  • 프로세스끼리 데이터를 주고 받고 공유 데이터를 관리하는 메커니즘

공유 메모리

  • 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한 부여
  • 프로세스가 서로 통신할 수 있도록 공유 버퍼 생성
  • 불필요한 데이터 복사의 오버헤드 발생하지 않아 가장 빠름

파일

  • 이를 기반으로 프로세스 간 통신

소켓

  • 네트워크 인터페이스를 통해 전송하는 데이터
  • TCP, UDP 가 있음

익명 파이프

  • 프로세스간 FIFO 방식의 임시 공간인 파이프를 기반으로 데이터를 주고 받음
  • 부모-자식 프로세스 간에만 사용 가능

명명된 파이프

  • 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프
  • 클라이언트/서버 통신을 위한 별도의 파이프 제공
  • 여러 파이프 동시 사용 가능

메시지 큐

  • 메시지를 큐 데이터 구조 형태로 관리
  • 커널에서 전역적으로 관리

6. 스레드와 멀티스레딩

스레드

  • 프로세스의 실행 가능한 가장 작은 단위

멀티스레딩

  • 프로세스 내 작업을 여러 개의 멀티스레드로 처리
  • 스레드 간 자원을 공유하므로 효율성이 높음

ex). 웹 브라우저의 렌더러 프로세스 에는 메인 스레드, 워커 스레드, 컴포지터 스레드, 레스터 스레드 가 존재


7. 공유 자원과 임계 영역

공유 자원 (Shared Resource)

  • 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 데이터 등의 자원이나 변수
  • 경쟁 상태 발생 가능

임계 영역 (Critical Section)

  • 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역
  • 상호 배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다.
  • 한정 대기 : 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안 된다.
  • 융통성 : 한 프로세스가 다른 프로세스의 일을 방해하면 안 된다.

뮤텍스 (Mutex)

  • 프로세스나 스레드가 공유 자원을 lock() 을 통해 잠금 설정하고 사용한 후에는 unlock() 을 통해 잠금 해제하는 객체
  • 뮤텍스는 잠금 or 잠금 해제 라는 상태만 가짐
  • 잠금 메커니즘

세마포어 (Semaphore)

  • 일반화된 뮤텍스
  • 간단한 정수 값과 wait , signal 함수로 공유 자원에 대한 접근 처리
  • wait : 자신의 차례가 올때까지 기다림
  • signal : 다음 프로세스로 순서를 넘겨줌
  • 신호 메커니즘

바이너리 세마포어

  • 0과 1의 두가지 값만 가질 수 있는 세마포어

카운팅 세마포어

  • 여러 개의 값을 가질 수 있으며, 여러 자원에 대한 접근을 제어

모니터

  • 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공

8. 교착 상태 (Deadlock)

  • 두 개 이상의 프로세스들이 서로 가진 자원을 기다리며 중단된 상태

교착 상태의 원인

  • 상호 배제
  • 점유 대기
  • 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
  • 환형 대기 : 서로의 자원을 요구하는 상황

교착 상태의 해결 방법

  1. 자원을 할당 시 애초에 조건이 성립되지 않도록 설계
  2. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스 당 요청할 자원들의 최대치를 통해 자원 할당 가능 여부를 파악하는 은행원 알고리즘 사용
  3. 교착 상태가 발생하면 사이클이 있는지 찾아보고 이에 관련된 프로세스를 한 개씩 지움
  4. 교착 상태 발생 시 작업 종료
  • 은행원 알고리즘 : 총 자원의 양과 현재 할당한 자원의 양을 기준으로 안정 or 불안정 상태로 나누고 안정 상태로 가도록 자원을 할당

0개의 댓글