Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

mooni

[OS] 프로세스와 스레드 본문

OS

[OS] 프로세스와 스레드

mooni_ 2025. 5. 7. 14:32

프로세스와 컴파일 과정

프로세스란?

  • 프로그램이 메모리에 올라가 인스턴스화된 실행 단위

 

컴파일 과정

  1. 전처리: 소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환
  2. 컴파일러: 오류 처리 및 코드 최적화 작업을 수행하고 어셈블리어로 변환
  3. 어셈블러: 어셈블리어를 목적 코드로 변환
  4. 링커: 라이브러리 함수 또는 다른 목적 코드와 결합하여 실행 파일 생성

라이브러리

  • 정적 라이브러리: 프로그램 빌드 시 코드에 통합되며 외부 의존성이 적지만 메모리 사용량 증가
  • 동적 라이브러리: 실행 시 필요할 때 DLL 파일을 참조하며 메모리 효율은 높지만 외부 의존성이 큼

프로세스의 상태

  1. 생성: 프로세스가 생성된 상태로, PCB가 할당됨. fork() 함수는 부모 프로세스를 복사해 자식 프로세스를 생성하며, exec() 함수는 새로운 프로세스를 실행함
  2. 대기: CPU 소유권을 기다리는 상태. 메모리가 충분하면 할당받음
  3. 대기 중단: 메모리 부족 등으로 일시적으로 실행되지 않음
  4. 실행: CPU 소유권과 메모리를 할당받아 인스트럭션을 수행. 이때 CPU burst가 발생
  5. 중단: 이벤트 발생으로 프로세스가 대기 상태로 전환. 보통 I/O 인터럽트로 발생
  6. 일시 중단: 실행 준비는 되었으나 메모리 부족으로 인해 잠시 멈춤
  7. 종료: 모든 작업이 완료되어 자원을 반환하며 종료. 비자발적 종료(abort)도 가능

 

프로세스의 메모리 구조

스택과 힙 (런타임 할당)

  • 스택: 함수 호출 시 매개변수, 지역 변수 등이 저장되는 영역. 재귀 호출 시에도 각 인스턴스마다 분리된 스택 프레임 생성
  • : 동적으로 할당된 메모리가 위치. malloc(), free() 등으로 관리

데이터 영역과 코드 영역 (정적 할당)

  • BSS Segment: 0 또는 초기화되지 않은 전역/static 변수 저장
  • Data Segment: 0이 아닌 값으로 초기화된 전역/static 변수 저장
  • Code/Text Segment: 실행 코드가 저장됨

PCB (Process Control Block)

  • 운영체제가 프로세스를 관리하기 위한 메타데이터 집합

PCB 구성 요소

  • 프로세스 스케줄링 상태: 준비, 일시중단 등의 상태 정보
  • 프로세스 ID: 고유 식별자 및 부모/자식 관계
  • 프로세스 권한: 자원 및 디바이스 접근 권한
  • 프로그램 카운터(PC): 다음 명령어 주소
  • CPU 레지스터: 현재 레지스터 상태
  • CPU 스케줄링 정보: 우선순위, 스케줄링 히스토리 등
  • 계정 정보: 사용자 정보 및 CPU 사용량
  • I/O 상태 정보: 관련 장치 목록 및 상태

컨텍스트 스위칭

  • PCB를 저장/로드함으로써 프로세스 간 전환 수행

 


멀티프로세싱과 IPC

멀티프로세싱

  • 여러 프로세스가 동시에 실행 가능
  • 병렬 처리 가능, 안정성과 신뢰성 증가

웹 브라우저에서의 멀티프로세싱

  • 브라우저 프로세스: UI와 권한 처리 담당
  • 렌더러 프로세스: 웹 콘텐츠 렌더링
  • 플러그인 프로세스: 외부 플러그인 동작 담당
  • GPU 프로세스: GPU 기반 화면 출력 처리

IPC (Inter-Process Communication)

  • 공유 메모리: 같은 메모리 블록을 여러 프로세스가 공유
  • 파일: 디스크에 기록된 파일을 기반으로 통신
  • 소켓: 네트워크 또는 동일 호스트의 다른 프로세스와 통신 (TCP/UDP)
  • 익명 파이프: 부모-자식 프로세스 간 단방향 통신
  • 명명된 파이프: 이름을 가진 파이프, 양방향 통신 가능
  • 메시지 큐: 큐 형태로 메시지를 전송/수신

스레드와 멀티스레딩

스레드

  • 프로세스 내 실행 단위. 스레드 간 메모리 공간 공유

멀티스레딩

  • 하나의 프로세스 내에서 여러 작업을 동시에 처리함으로써 효율성 증가

공유 자원과 임계 영역

공유 자원

  • 둘 이상의 프로세스 또는 스레드가 접근 가능한 변수나 구조

임계 영역

  • 동시에 접근 시 오류가 발생할 수 있는 코드 영역

해결 조건

  1. 상호배제: 동시에 둘 이상 접근 불가
  2. 한정대기: 무한 대기 금지
  3. 융통성: 필요 없을 때는 자유롭게 접근 허용

동기화 기법

  • 뮤텍스(Mutex): lock() unlock()으로 임계 영역 보호

  • 세마포어(Semaphore): 정수 값 기반, wait() signal()로 접근 제어 
    • 바이너리 세마포어: 0 또는 1
    • 카운팅 세마포어: 여러 자원 제어

  • 모니터(Monitor): 공유 자원을 캡슐화, 인터페이스로 접근 제어


교착상태 (Deadlock)

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

발생 조건

  1. 상호배제: 자원은 독점되어야 함
  2. 점유대기: 자원을 가진 채로 다른 자원 요청
  3. 비선점: 다른 프로세스의 자원을 강제 획득 불가
  4. 환형 대기: 서로의 자원을 요청하며 순환

해결 방법

  1. 조건 회피: 설계 단계에서 원인 차단
  2. 은행원 알고리즘: 자원 요청 최대치를 기반으로 안전성 판단
  3. 사후 회복: 교착 상태 발생 시 탐지 후 해당 프로세스 종료
  4. 수동 개입: 사용자가 직접 종료. 비용이 낮아 현대 OS에서 자주 사용

'OS' 카테고리의 다른 글

[OS] CPU 스케줄링 알고리즘  (0) 2025.05.20
[OS] 메모리  (0) 2025.05.07
[OS] 운영체제와 컴퓨터  (0) 2025.05.07