프로세스

서재·2023년 6월 17일

운영체제

목록 보기
1/3

🏠 프로세스

프로그램 : 정적, 실행 파일
프로세스 : 동적, 메모리에 할당되어 실행되고 있는 프로그램의 인스턴스

  • 프로세스 당 최소 1개의 스레드를 가짐
  • 각 프로세스는 서로 접근 불가능
  • 독립된 메모리 영역 : code, data, stack, heap

⚙️ 메모리 구조

  • Code : 사용자가 작성한 프로그램 함수
  • Data : 초기화한 전역, static 변수
  • BSS : 초기화되지 않은 전역, static 변수
  • Heap : 프로그래머가 필요 시 직접 사용 객체
  • Stack : 함수 수행 후 복귀할 주소

리눅스 :

👦 고아 프로세스
종료 이전에 부모 프로세스를 잃은 프로세스
부모 프로세스가 자식 프로세스보다 먼저 종료

🧟 좀비 프로세스
실행이 종료되었지만 삭제되지 않은 프로세스
자식 프로세스가 부모 프로세스보다 먼저 종료

부모 프로세스가 자식 프로세스의 종료 상태를 회수하면 제거됨

💀 Sub Reaper
프로세스의 종료 상태를 수신/처리 하는 부모 프로세스의 역할을 수행


👤 스레드

LWP (경량 프로세스)

프로세스 내의 실행되는 흐름

  • 프로세스에 있는 메모리 공간을 공유
  • 각 스레드는 별도의 Register, Stack을 가지며, 서로의 Heap에 접근 가능

Light Weight Process
리눅스에서 스레드와 프로세스가 비슷한 역할을 하기에 스레드를 Light Weight Process 로 지칭

스레드 주소 공간

스레드가 생성되고 실행되는 동안 접근 가능한 메모리 영역
프로세스 주소 공간 내부에 형성

  • Thread Code : 프로세스 코드 영역의 모든 함수 호출 가능
  • Thread Data : 개별 스레드 전용 공간 스레드 로컬 스토리지 + 프로세스에 의해 공유되는 변수 공간
  • Thread Heap : 프로세스의 힙 공간
  • Thread Stack : 프로세스 스택의 일부분 스레드끼리 공유하지 않음

🏘️ 멀티 프로세스

다중 처리

여러 개의 프로세스가 작업을 병렬처리

독립적인 주소 공간
각 프로세스 간 메모리 구분

장점

  • 높은 안정성

단점

  • 많은 메모리 공간과 CPU시간 차지
  • 작업량이 많을수록 성능 저하 : Context-Switching

👬 대칭형 다중 처리

SMP (Symmetric Multi-procssing)
한 개의 공유된 메모리 사용 -> 동기화 작업 필요

👫 비대칭형 다중 처리

AMP (Asymmetric Multi-procssing)
프로세서들 간에 master-slave 관계가 존재
master 프로세스만 OS에서 작업을 실행


👥 멀티 스레드

하나의 프로세스에서, 여러 스레드로 자원을 공유하며 작업을 나누어 수행

장점

  • 작은 메모리 공간
  • 높은 속도

단점

  • 동기화 문제 발생
  • 문제 발생 시 전체 프로세스에 영향을 끼침

스레드 안전

Thread safety
멀티 스레드 환경에서 함수/변수/객체 에 여러 스레드로부터의 동시 접근이 문제를 발생시키지 않는 상태

유저 스레드 : 커널 위에서 커널의 지원 없이 유저가 관리하는 스레드
커널 스레드 : 커널이 지원하는 스레드

  • Many-to-One Model
    Many 유저 스레드, One 커널 스레드
    병렬 처리 불가능

  • One-to-One Model
    One 유저 스레드, One 커널 스레드
    동시성 향상
    여러 스레드 동시 수행 in 멀티 프로세서 시스템

  • Many-to-Many Model
    Many 유저 스레드, Many- 커널 스레드
    동시성 향상 +

  • 2-level Model
    Many-to-Many Model
    특정 유저 스레드를 위한 커널 스레드 별도 제공


🔍️ 멀티 프로세스 vs 멀티 스레드

멀티 프로세스멀티 스레드
안정성높음낮음
메모리 공간작음
CPU 시간느림빠름

🚥 프로세스 상태

프로세스 생명주기

  • 생성 Created
    프로세스가 생성된 상태

  • 준비 Ready
    CPU 할당 대기
    디스패치 : 메모리 큐에 올라감

  • 실행 Running

  • 대기 Blocked
    사건 발생 시 CPU 양도 후 대기

  • 종료 Terminated :
    모든 자원 회수
    PCB 삭제

  • 중단된 준비 Suspended Ready :
    프로세스가 메모리를 바로 받지 못 할 때

  • 중단된 대기 Suspended Blocked :
    대기 중 메모리 공간을 잃은 상태

🔄 스와핑

오버헤드 (어떤 처리를 위해 추가되는 간접적인 처리시간/메모리)

  • 활동 상태 Active State
    메모리 공간의 일정량을 부여받은 상태
    메모리

  • 중단 상태 Suspended State
    메모리가 회수된 상태
    하드디스크

Swap in : Suspended -> Active
Swap out : Active -> Suspended


📄 PCB

Process Control Block
하나의 프로세스에 대한 중요한 정보를 표현

커널 영역 보호된 메모리 영역 에 저장

  • 포인터
    프로세스의 현재 위치

  • 프로세스 상태
    생성/준비/실행/대기/완료 상태

  • 프로세스 번호
    프로세스 식별자

  • 프로그램 카운터
    다음에 실행할 명령어의 주소

  • 레지스터

  • 메모리 제한

  • 열린 파일 목록


🔄 Context-Switching

문맥 교환
여러 프로세스/스레드 를 돌아가며 작업을 처리
프로세스/스레드 를 돌며 상태(Context)를 보관/복구 반복

오버헤드 (어떤 처리를 위해 추가되는 간접적인 처리시간/메모리)

🏠 Process Context-Switching

가상 메모리 공간 초기화

👤 Thread Context-Switching

가상 메모리 공간이 동일 스레드는 프로세스의 자원을 공유


🧭 CPU 스케줄링

CPU의 자원은 한정
한정된 자원을 효율적으로 사용

호위 효과
이전 프로세스의 실행시간이 길다면 이후 실행시간이 짧은 프로세스들이 실행되지 못해 호위무사처럼 뒤따라서 기다리고 있는 것

Multi-level Feedback Queue

다중 우선순위 큐
각각의 우선순위를 가진 여러 개의 큐
동적으로 우선순위를 부여
높은 우선순위를 가진 프로세스와 낮은 우선순위를 가진 프로세서를 따로 관리

📜 CPU 스케줄링 기법

  • 선점 스케줄링 preemptive scheduling
    다른 프로세스가 할당받은 cpu를 중지시키고 차지 새치기
    많은 오버헤드 발생
    대기 상태가 존재하지 않음

    • Round-Robin 시분할 에이징
    • SRT Shortest Remaining Time
    • 선점 우선순위
  • 비선점 스케줄링 non-preemptive scheduling
    모든 프로세스가 요구에 대해 공정
    병목현상
    대기 상태가 존재하지 않음

    • FIFO First In First Out
    • SJF Shortest Job First
    • 우선순위
    • HRN Highest Response Ratio Next 에이징

🧭 단기, 중기, 장기 스케쥴러

스케줄링을 수행하는 모듈

  • 📌 단기 스케쥴러 Short-Term Scheduler Dispatcher CPU Scheduler
    CPU 할당 관리
    CPU 사용률 최대화
    응답 시간 최소화

  • 📌 중기 스케쥴러 Medium-Term Scheduler
    메모리 사용 관리
    프로세스 스와핑

  • 📌 장기 스케쥴러 Long-Term Scheduler Job Scheduler
    프로세스 생성/종료 관리
    시스템 안정성 유지
    일괄처리 시스템

🏢 현대 OS ?

  • ✔️ 단기
    사용한다

  • 중기
    가상 메모리 사용 시 일부만 실제 메모리에 올라와도 됨

  • 장기
    장기 스케쥴러 : 일괄처리 시스템
    현대 운영체제 : Round Robin, 가상 메모리 사용

profile
입니다.

0개의 댓글