운영체제

프로세스

iksadnorth 2023. 7. 23. 15:37

👣 용어 정리

프로세스
컴퓨터에서 실행되고 있는 프로그램.

스레드
프로세스 내 작업.

👣 컴파일 과정

우선 C언어를 기준으로 컴파일 과정을 설명.

 

C언어 컴파일 과정

전처리 소스 코드의 주석 제거 및 헤더 파일 병합 전처리 된 소스 코드 파일(*.i)로 변환 컴파일 오류 처리, 코드 최적화 작업을 하고 어셈블리어(*.s)로 변환 어셈블러 어셈블리어를 목적 코드(Obje

ikadnorth.tistory.com

👣 프로세스 스케줄링 상태

생성

프로세스가 생성된 상태.
C 언어에서 fork() 또는 exec() 함수로 생성됨.
이 때, PCB가 할당됨.

더보기

fork()

프로세스를 생성하는 시스템 콜입니다.
현재 실행 중인 프로세스와 동일한 모든 코드와 데이터를 복사하여 자식 프로세스를 생성합니다.
이때 부모 프로세스와 자식 프로세스는 서로 다른 프로세스로 동작하며,
각각 독립적인 메모리 공간을 가집니다.
fork() 함수는 프로세스의 병렬 실행과 프로세스 간 통신 등에 사용됩니다.

exec()

새로운 프로그램을 현재 프로세스로 불러오는 시스템 콜입니다.
새로운 프로그램을 현재 프로세스의 메모리 공간에 덮어씌우고 실행하게 됩니다.
이때, 프로세스의 코드와 데이터는 새로 불러온 프로그램의 코드와 데이터로 대체되게 됩니다.
exec() 함수는 주로 다른 프로그램을 실행하거나 프로그램을 갱신하고자 할 때 사용됩니다.

대기

메모리 공간이 충분하면 메모리를 할당.
아니라면 CPU 소유권을 기다리며 대기.

대기 중단

메모리 부족으로 일시 중단.

실행

CPU 소유권과 메모리를 할당받고 실행.

중단

인터럽트에 의해 프로세스가 중단된 상태.

일시 중단 

중단 상태에서 메모리가 부족해 일시 중단.

종료

메모리와 CPU 소유권을 모두 해제한 상태.

👣 프로세스 메모리 구조

스택 & 힙

런타임 단계에서 메모리에 할당.

데이터 & 코드 영역

컴파일 단계에서 메모리에 할당.

👣 PCB

OS에서 프로세스의 Meta Data를 저장한 데이터.
프로세스가 생성되면 PCB를 생성.

Process State : 프로세스 스케줄링 상태
Process ID : 해당 프로세스의 자식 프로세스 ID
Process Counter : 프로세스에서 실행해야 할 다음 명령어의 주소 포인터
Registers : 프로세스 실행 중 CPU 레지스터에 저장했던 값.

👣 Context Switching

1 개의 CPU에서 1 개 이상의 프로세스를 실행하기 위해 수행하는 과정.
실행 중인 프로세스의 상태를 저장하고 다음 실행할 프로세스의 상태를 복원하는 과정.
이 과정은 실제 실행을 하기 위해 소모되는 Cost가 아니기 때문에 너무 자주 일어나면 오히려 성능 저하가 생긴다.
아래 그림에 의하면 Idle Time(유휴 시간) 동안 프로세스를 실행하지 못한다.

👣 멀티 프로세싱

여러 개의 프로세스로 동시에 2 가지 이상의 일을 수행하는 것.
프로세스끼리의 메모리는 OS에 의해 격리되어 장애가 프로세스 사이에 공유되지 않는다.

👣 IPC

 

IPC - Inter Process Communication

프로세스끼리 데이터를 주고 받는 메커니즘. 해당 방법들은 모두 스레드 사이의 공유방법보다 속도가 느리다. 1. 공유 메모리 특정 메모리 블록에 대한 접근 권한이 부여되어 통신이 가능한 것.

ikadnorth.tistory.com

👣 스레드와 멀티스레딩

👣 스레드

프로세스의 실행 가능한 작업 단위.
독립적인 실행 흐름과 스택 영역을 부여받는다.

👣 멀티스레딩

프로세스 내 작업을 여러 스레드로 처리하는 기법.
멀티 프로세싱과 달리 스레드끼리 장애가 전파될 수 있다.

👣 프로세스 자원 동기화 전략

 

프로세스 자원 동기화 전략

👣 공유 자원 프로세스, 스레드가 함께 접근 가능한 자원. 2개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태(race condition)라고 한다. 👣 임계 자원 프로세스, 스레드의 접근 순서로 결

ikadnorth.tistory.com

👣 교착 상태 - DeadLock

말그대로 2 개 이상의 프로세스가 서로의 자원을 기다리며 중단되는 상태.

👣 교착 상태 원인

1. 상호 배제 (무한정 공유가 안 될 때)
한 프로세스가 자원을 독점해 다른 프로세스가 접근할 수 없는 것

2. 점유 대기 (가지고 있으면서 또 바라는 것)
이미 자원을 보유한 상태에서 점유된 자원을 요청해 대기하고 있는 상태.

3. 비선점 (계속 얌전히 기다려야 할 때)
다른 프로세스 자원을 강제로 가져올 수 없는 상태.

4. 환형 대기 (서로에게 바라는 것을 서로가 점유할 때)
자원 요청을 그래프로 그렸을 때, 원형으로 요청하고 있는 상태.

👣 교착 상태 해결

1. 예방
교착 상태가 되기 이전에 미리 조치를 취하는 방법.
데드락 조건 4가지 중 하나를 제거함으로써 해결.

  • 상호 배제 방지: 모든 자원 공유 허용
  • 점유 대기 방지: 자원을 요청하기 위해선 자신의 모든 자원을 해제하도록 함.
  • 비선점 방지: 프로세스 시작 전에 모든 자원을 할당함.
  • 환형 대기 방지: 자원에 순서를 부여해 프로세스가 순서가 증가하는 방향으로만 자원 요청.

단점 : 자원 낭비가 크다.

2. 회피
프로세스에 자원을 할당해도 여전히 안정 상태로 남아있는지 확인하는 방법.
은행원 알고리즘를 사용해서 해결.
단점 : 오버헤드가 크다.

👣 은행원 알고리즘

 

은행원 알고리즘

알고리즘의 내용을 설명하기 앞서서 용어 정리. Max Allocate Available 의미 각 요청자가 얼마나 요구하는지 각 요청자에게 얼마나 할당했는지 제공자가 현재 얼마나 보유 중인지 아래 그림을 보면

ikadnorth.tistory.com

3. 탐지
데드락이 발생할 때, 이를 탐지하고 문제를 해결하는 것.
'자원 할당 그래프'를 이용해서 탐지.
단점 : 자원 요청마다 알고리즘을 실행하면 오버 헤드가 크다.

4. 회복
교착의 원인이 되는 프로세스를 종료하거나 자원을 해제하면서 회복

  • 프로세스 종료 방법
    • 교착 상태의 모든 프로세스를 전부 종료
    • 교착 상태가 제거될 때까지 프로세스를 하나씩 종료함.
  • 자원 선점 방법
    • 자원이 빼앗긴 프로세스는 강제 종료 후 다시 시작
    • 교착 상태에 빠진 프로세스가 필요로 하는 자원을 강제로 가져옴

'운영체제' 카테고리의 다른 글

은행원 알고리즘  (0) 2023.07.23
C언어 컴파일 과정  (0) 2023.07.23
페이지 교체 알고리즘  (0) 2023.07.22
메모리 할당 방법  (0) 2023.07.22
스와핑 - Swapping  (0) 2023.07.22