교착상태(deadlock): 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다리며 작업을 더 이상 진행하지 못하는 상태.

 

아사상태와 차이점

  • 아사 현상(starvation): 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제.
  • 교착 상태: 여러 프로세스가 작업을 진행하다 보니 자연 발생적으로 일어나는 문제. → 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생함.

자원 할당 그래프(RAG:resource allocation graph): 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것. 프로세스는 원으로, 자원은 사각형을 표현함.

다중 자원(multiple resource): 여러 프로세스가 하나의 자원을 동시에 사용하는 경우. 수용할 수 있는 프로세스 수를 사각형 안에 작은 동그라미로 표현함.

교착상태 필요조건

  • 상호배제(mutual exclusion): 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 베타적인 자원이여야 함.
  • 비선점(non-pteemptive): 한 프로세스가 사용중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는. 비선점 자원이여야 함.
  • 점유와 대기(hold and wait): 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 함.
  • 원형 대기(circular wait): 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 함.

교착상태 해결

  • 교착 상태 예방(prevention) : 교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화하는 방식으로 교착상태 조건 4가지에 대하여 각각의 방법이 존재함. (하나라도 조건을 만족하지 않으면 교착상태 발생 X)
  • 교착 상태 회피(avoidance) : 교착상태가 발생하지 않도록 자원할당량을 조절하여 교착상태를 회피하는방식. (시스템의 상태를 계속 감시 → 안전한 상태(Safe State)로 유지)
  • 교착 상태 검출(detection)과 회복(recovery) : 교착 상태 검출은 어떤 제약을 가하지 않고 자원 할당 그래프를 모니터링하면서 교착 상태가 발생하는지 살펴보는 방식으로 만약 교착 상태가 발생하면 교착 상태 회복 단계가 진행됨.
  • 교착상태 무시(Ignore) : 교착상태가 드물게 발생하는 경우 예방, 검출과 같은 지속된 오버헤드 및 성능 저하를 발생하는 것보다 재부팅하는 것이 더 좋을 수 있음.

교착 상태 예방

  • 상호 배제 예방: 시스템 내에 있는 독점적으로 사용할 수 있는 자원을 없애는 방법→ 자원 공유 허용( 상호 배제를 무력화하는 것은 사실상 어려움)
  • 비선점 예방: 모든 자원을 빼앗을 수 있도록 만드는 방법→ 선점(preemptive)을 허용( 아사 현상을 일으켜 무력화 어려움)
  • 점유와 대기 예방: 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법→ 전부 할당하거나 아니면 아예 할당하지 않는 방식 적용. (자원이 아닌 프로세스의 자원 사용 방식을 변화시켜 교착 상태를 처리한다는 점에서 의미가 있음)
  • 원형 대기 예방: 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법. 모든 자원에 숫자를 부여하고 숫자가 큰 자원을 할당하는 것.

점유와 대기 예방의 단점

1.프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어려움.

2.자원의 활용성 하락.

3.많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리함.

4.결국 일괄 작업 방식으로 동작.

 

원형 대기 예방의 단점

1.프로세스 작업 진행에 유연성이 떨어짐.

2.자원의 번호를 어떻게 부여할 것인지에 대한 문제.

 

교착 상태 회피: 프로세스에 자원을 할당할 때 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악하여 그 수준 이하로 자원을 나누어주는 방법. 범위 내에서만 자원 할당, 교착 상탵 발생 범위 프로세스 대기

 

안정 상태: 모든 프로세스가 정상적으로 종료가 가능한 상태

불안정 상태: 교착 상태가 될 가능성이 있음.

 

교착상태 회피는 자원 총수와 현재 할당된 자원 수를 기준으로 시스템을 안정상태와 불안정 상태로 나누고 시스템이 안정 상태를 유지하도록 자원 할당함. → 교착상태는 불안정 상태의 일부분임.

 

교착 상태 회피 문제점

  • 시스템을 항상 감시하고 있어야 하므로, 오버헤드 발생.
  • 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 함.
  • 시스템의 전체 자원 수 및 프로세스 수가 고정적이여야 함.
  • 사용되지 않는 여유 자원이 있어야 하는 등 자원 활용률이 낮음.

교착 상태 검출: 운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방식. 교착 상태가 발견되면 이를 해결하기 위해 교착 상태 회복 단계를 밟음.

 

타임아웃을 이용한 교착 상태 검출: 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리함. → 교착 상태가 자주 발생하지 않을 것이라는 가정하에 사용하는 것으로, 특별한 알고리즘이 없어 쉽게 구현. 타임아웃이 되면 프로세스 종료.

데이터베이스에서 타임아웃 문제: 데이터베이스에서 타임아웃으로 프로세스가 종료되면 일부 데이터의 일관성이 깨질 수 있음. → 해결: 체크보인트(check point: 작업 중 문제가 발생하면 저장된 상태로 돌아오기 위한 표시) 와 롤백(roll back: 작업 중 문제 발생하여 과거의 체크포인트로 되돌아가는 것) 사용.

 

자원 할당 그래프를 이용한 교착 상태 검출

 

교착 상태 회복: 교착 상태가 검출 된 후 교착 상태를 푸는 후속 작업을 하는 것. 회복단계에서는 교착 상태를 유발한 프로세스를 강제로 종료함.

강제 종료 방법.

① 교착 상태를 일으킨 모든 프로세스를 동시에 종료

② 교착 상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료

  • 우선순위가 낮은 프로세스를 먼저 종료
  • 우선순위가 같은 경우 작업 시간이 짧은 프로세스를 먼저 종료
  • 위의 두 조건이 같은 경우 자원을 많이 사용하는 프로세스를 먼저 종료

교착 상태 무시: 교착 상태에 대해 아무런 대비책 없이 발생하도록 내버려 둠.

  • 교착 상태 발생 확률이 낮은 경우
  • 교착 상태 예방, 회피, 탐지에서 오버헤드가 발생하므로 발생 시 재시작 혹은 강제 종료 →핵 시스템, 원자력 시스템, 비행기 등과 같은 경성 실시간 시스템(hard-real time)에서는 적합하지 않음
  • 타조 알고리즘

'2025-1 > 운영체제' 카테고리의 다른 글

05. 프로세스 동기화  (0) 2025.04.13
04. CPU 스케줄링  (0) 2025.04.12
03. 프로세스와 스레드  (0) 2025.03.22
02. 컴퓨터시스템 구조와 성능 향상  (0) 2025.03.22
01. 커널과 인터페이스  (0) 2025.03.12

 

IPC(Inter-Process Communication): 프로세스간 데이터를 공유하기 위한 방법.

 

프로세스 내부 데이터 통신: 프로세스 내 스레드 간 통신→ 스레드는 전역변수나 파일을 이용하여 데이터를 공유

프로세스 간 데이터 통신: 같은 컴퓨터(동일 호스트)에 있는 프로세스간 통신→ 공용 파일 또는 운영체제가 제공하는 자원을 이용

네트워크를 이용한 데이터 통신: 여러 컴퓨터가 네트워크로 연결되어 있을 때 통신→ 소켓을 이용한 데이터 공유

 

 

방향성에 따른 분류

 

단방향 통신(simplex communication): 한쪽 방향으로만 데이터를 전송할 수 있는 구조. 대표적으로 파이프(PIPE) 기법이 있음.

양방향 통신(duplex communication): 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 대표적으로 소켓 통신이 있음.

반양방향 통신(half-duplex communication): 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조.(동시전송불가) 대표적으로 메시지 큐, 공유 메모리가 있음.

 

동시성에 따른 분류

 

대기가 있는 통신: 동기화를 지원하는 통신 방식. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동 대기 상태(블록킹, blocking)

대기가 없는 통신: 동기화를 지원하지 않는 통신 방식. 다른 작업을 하는 중에 데이터가 수신되면 처리(인터럽트 처리방식, 폴링 처리방식)

 

IPC 기법

 

시그널(signal): 운영체제는 프로세스를 관리하기 위한 시그널을 정의함. 시그널을 수신한 프로세스는 그에 맞는 행위를 수행함.

 

인터럽트(interrupt): 이벤트 발생에 따른 처리를 위한 방식. 프로세스가 동작 중 인터럽트가 발생하면 해당 기능을 수행.

공유 파일: 서로 다른 프로세스가 동일한 파일을 공유하여 사용하는 방식. 프로세스 처리 성능은 기록 장치의 읽기, 쓰기 속도에 영향을 받음.

 

예시

  • fd=open("file.txt", O_RDWR): 파일 열기, 파일 기술자(fd)를 리턴
  • write(fd,"TEST",5): 파일 쓰기
  • read(fd, buf, 5): 파일 읽기
  • close(fd): fd가 가리키는 파일을 닫음.

 

 

순차 파일(sequential file): 아무리 큰 파일이라도 파일 내 데이터는 개념적으로 한 줄로 저장.

파일 기술자(File Descriptor, fd): 열린 파일이나 다른 입출력 자원을 가리키는 정수 값.

역할: 프로그램이 파일, 소켓, 파이프 등 다양한 입출력 자원에 접근할 때, 운영체제는 각 자원에 고유한 파일 기술자를 할당함. → 프로그램은 이 파일 기술자를 사용하여 해당 자원에 데이터를 읽고 쓰거나 제어하는 등의 작업을 수행함.

특징

  • open()함수로 파일을 열면 파일 기술자 fd를 얻음
  • 파일 접근 권한 외에 현재 파일의 어느 위치를 읽고 있는지에 대한 정보 보관
  • 파일에서 파일 기술자는 단 하나
  • 처음 파일이 열리면 파일 기술자는 맨 앞에 위치함
  • 파일을 읽거나 쓰면 파일 기술자는 계속 전진함

 

파이프(PIPE): 한 프로세스의 출력을 다른 프로세스의 입력으로 연결해주는 역할. 데이터가 한 방향으로 흐르는 단방향 통신 채널을 제공함.

 

특징

  • 단방향 통신: 파이프는 한쪽 끝에서 데이터를 쓰고, 다른 쪽 끝에서 데이터를 읽는 단방향 통신을 지원함.
  • 부모-자식 관꼐 프로세스 간 통신: 부모 프로세스가 생성하고, fork() 시스템 호출을 통해 생성된 자식 프로세스와 통신하는데 사용됨.
  • 버퍼: 파이프는 내부적으로 버퍼를 가지고 있어 데이터를 임시로 저장함.
  • 동기화: 파이프는 읽기/쓰기 작업 시 동기화를 제공하여 데이터 손실이나 경쟁 상태를 방지함.

#include <stdio.h>
#include <unistd.h>

int main() {
    int pid, fd[2];
    char buf[5];

    if (pipe(fd) == -1) exit(-1);   // 파이프 생성
    pid = fork();                   // 자식 프로세스 생성

    if (pid < 0) exit(-1);          // fork 실패 시 종료
    else if (pid == 0) {            // 자식 프로세스
        close(fd[0]);               // 읽기 닫음 (자식은 쓰기만 함)
        write(fd[1], "Test", 5);    // "Test" 문자열 쓰기
        close(fd[1]);               // 쓰기 종료
    }
    else {                          // 부모 프로세스
        close(fd[1]);               // 쓰기 닫음 (부모는 읽기만 함)
        read(fd[0], buf, 5);        // 파이프로부터 읽기
        printf("%s\n", buf);        // 읽은 데이터 출력
        close(fd[0]);               // 읽기 종료
    }

    return 0;
}

 

 

메시지큐: 큐(queue) 방식으로 데이터를 접근.

 

특징

  • 큐는 행위에 따라 En-queue(큐에 데이터를 삽입)와 De-queue(큐에서 데이터를 추출)로 분류
  • 양방향, 비동기 방식
  • 부모-자식 간의 프로세스가 아니더라도 프로세스 간 메시지 송수신 가능함

 

공유 메모리: 운영체제에서 별도로 할당해준 공유 영역 활용하는 방식. 각 응용 프로그램을 해당 영역 포인터로 접근. (공유 메모리 확인 명령: ipcs/ 자원 생성: ipcmk/ 자원 삭제: ipcrm)

 

소켓: 여러 컴퓨터에 있는 프로세스끼리 통신하는 방법. 네트워크 소켓은 컴퓨터 네트워크를 공유하는 프로세스 간의 통신.

종류(socket()의 옵션)

  • PF_LOCAL: 같은 호스트 내 프로세스 간 통신
  • PF_INET: 인터넷을 통한 다른 호스트 통신(ipv4)
  • PE_INET6: 인터넷을 통한 다른 호스트 통신(ipv6)

 

 

임계구역(critical section): 둘 이상의 프로세스(또는 스레드)가 동시에 접근하면 안되는 공유자원(데이터, 메모리 등)을 접근하는 코드 영역.

 

해결법

1. 상호 배제(mutual exclusion): 한 프로세스가 임계 구역에 들어가면 다른 프로세스는 임계구역에 들어 갈 수 없음.

2.한정 대기(bounded waiting): 어떤 프로세스도 무한 대기(infinite postpone)하지 않아야 함.

3.진행의 융통성(progress flexibility): 한 프로세스가 다른 프로세스의 진행을 방해해서는 안됨.

 

데커 알고리즘

 

특징

  • 두 개의 프로세스가 임계구역에 동시에 진입하지 않도록 보장.
  • 최초의 소프트웨어 기반 상호 배제 알고리즘 중 하나.
  • 플래그와 turn 변수를 사용함.
  • 서로 양보하거나 대기하면서 임계구역 진입을 조절함.
flag[0] = true;         // 나 들어갈래!
while (flag[1]) {       // 상대도 들어가고 싶다면
    if (turn != 0) {    // 내 차례가 아니면
        flag[0] = false;
        while (turn != 0);  // 차례 올 때까지 대기
        flag[0] = true;
    }
}
// → 여기서 임계구역 진입
...
turn = 1;               // 상대 차례 줌
flag[0] = false;        // 나 이제 안 들어갈래

 

장점: 상호배제, 진행, 한정 대기 모두 만족함.

단점: 구현 복잡, CPU 명령어 수준에서 완벽히 구현하려면 까다로움.

 

피터슨 알고리즘

 

특징

  • 데커 알고리즘을 단순화한 형태.
  • 여전히 두 개의 프로세스만을 위한 알고리즘.
flag[0] = true;      // 나 들어갈래!
turn = 1;            // 상대에게 양보할게
while (flag[1] && turn == 1);  // 상대도 들어가고 싶고, 내 차례 아니면 기다려
// → 임계구역 진입
...
flag[0] = false;     // 나 이제 안 들어갈래

 

장점: 매우 간단, 상호 배제 조건 만족. 교착상태 없이 공정함.

 

세마포어(semaphore): 프로세스가 임계구역에 진입하기 전에 스위치를 사용 중으로 놓는 것.

  • 후에 도착하는 프로세스는 앞의 프로세스가 작업을 마칠 때까지 기다림.
  • 프로세스가 작업을 마치면 세마포어가 다음 프로세스에 임계구역을 사용하라는 동기화 신호를 보냄.

내부코드

  • Semaphore(n) : 전역 변수 RS를 n으로 초기화, RS에는 현재 사용 가능한 자원의 수 저장
  • P() : 잠금을 수행하는 코드로 RS가 0보다 크면(사용 가능한 자원이 있으면) 1만큼 감소시키고 임계구역에 진입, RS가 0보다 작으면(사용 가능한 자원이 없으면) 0보다 커질 때까지 기다림
  • V() : 잠금 해제와 동기화를 같이 수행하는 코드로, RS 값을 1 증가시키고 세마포어에서 기다리는 프로세스에게 임계구역에 진입해도 좋다는 wake_up 신호를 보냄

모니터(monitor): 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공해 자원을 보호하고 프로세스 간의 동기화를 시킴. (자원을 숨기고 인터페이스만 제공하는 시스템 호출과 같은 개념)

 

작동원리

  1. 임계구역으로 지정된 변수나 자원에 접근하려는 프로세스는 직접 P()나 V()를 사용하지 않고 모니터에 작업 요청
  2. 모니터는 요청받은 작업을 모니터 큐에 저장 후 순서대로 처리하고 결과만 해당 프로세스에 알려줌.

 

 

'2025-1 > 운영체제' 카테고리의 다른 글

06. 교착상태  (0) 2025.04.13
04. CPU 스케줄링  (0) 2025.04.12
03. 프로세스와 스레드  (0) 2025.03.22
02. 컴퓨터시스템 구조와 성능 향상  (0) 2025.03.22
01. 커널과 인터페이스  (0) 2025.03.12

 

CPU 스케줄링: 운영체제가 CPU 자원을 효율적으로 관리하기 위해 어떤 프로세스에게 CPU를 할당할지 결정하는 과정. →CPU는 한번에 하나의 프로세스(작업)만 실행 가능, 여러 프로세스가 동시에 실행되는 것처럼 보이기 위해 스케줄링이 필수적.

 

스케줄링 정책: 정해진 시간(time slice, time slot)에 프로세서를 점유할 프로세스를 선택.

 

스케줄링의 목표

  • 공평성: 모든 프로세스가 자원을 공평하게 배정받아야 함. 특정 프로세스 배제X
  • 효율성: 우선순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정
  • 안정성: 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호.
  • 확장성: 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되게 해야 함.
  • 반응 시간 보장: 예측하는 시간 내에 적절한 반응을 해야 함.
  • 무기 연기 방지: 특정 프로세스 작업 무한 연기 방지.

스케줄링 단계

 

상위 단계 스케줄링:장기/작업/승인 스케줄링. 시스템에 부담이 되지 않도록 전체 작업 수 조절.

하위 단계 스케줄링: 단기 스케줄링. 짧은 시간에 처리, 프로레스 CPU 할당/ 대기상태 전환.

중간 단계 스케줄링: 보류-활성화 상태 전환. 활성화된 프로세스 조절→ 과부화 해소.

 

선점형 스케줄링(Preemptive Scheduling): 운영체제가 필요하다고 판단하면 실행 상태에 있는 프로세스의 작업 중단→ 다른 프로세스가 프로세서 쟁취 가능.

 

특징

  • CPU 독점 불가능
  • 대화형 시스템, 시분할 시스템에 적합
  • 저수준 스케줄러가 사용

비선점형 스케줄링(Non-Preemptive Scheduling): 한 프로레스가 CPU를 사용하면 종료 또는 자발적으로 나올 때까지 다른 프로세스 대기.

 

장점

  • 선점형 스케줄링보다 스케줄러의 작업량이 적음
  • 문맥 교환에 의한 프로세서 및 시간적인 낭비 감소

단점

  • 큰 프로세스가 CPU 사용 시 타 프로세스의 대기시간 증가→ 전체 시스템 처리율 감소

프로세스 우선순위: 커널프로세스>일반프로세스 → 우선순위가 높다: 더 빨리, 자주 실행.

 

특징

  • 우선순위가 높은 프로세스가 CPU를 먼저, 더 오래 차지함.
  • 시스템에 따라 높은 숫자가 높은 우선순위를 나타내기도, 낮은 숫자가 높은 우선순위를 나타내기도 함.
  • 사용자가 프로세스의 우선순위 조절 가능→ 관리자만 우선순위 높이기 가능, 일반 계정은 낮추기만 가능.

 

CPU burst: 프로그램 실행과정에서 CPU가 코드를 집중적으로 실행하는 상황

I/O burst: I/O 장치에 의해 입출력이 이루어지는 상황

 

CPU 집중 프로세스: CPU 사용 시간이 많고 계산 중심적인 프로세스.

 

특징

  • I/O 작업보다는 계산 위주로 시간 소비.
  • CPU 점유 시간이 길고 입출력 작업은 적음.
  • 문맥 교환이 적음.
  • 처리량 위주의 작업에서 효율적임.

사용예시: 계산을 주로 하는 비디오, 이미지 압축 프로그램, 행렬 연산하는 AI 프로그램 등.

 

I/O 집중 프로세스: 입출력 작업이 많은 프로세스.

 

특징

  • CPU 사용 시간은 짧고, I/O 작업을 기다리는 시간이 많음.
  • CPU는 자주 쉼, I/O 완료를 기다리는 동안 대기 상태.
  • 많은 수의 프로세스를 동시에 처리하기에 적합.

사용예시: 파일 다운로드 프로그램, 웹 브라우저, 동영상 스트리밍 앱 등.

 

우선 배정: I/O burst 상황에서 다른 프로세스가 CPU를 사용할 수 있기 때문에 배정 순서가 성능에 영향을 미침. 스케줄링 시 I/O 집중 프로세스의 우선순위를 CPU 집중 프로세스보다 높이면 시스템 효율 향상→사이클 훔치기(cycle stealing)

 

전면 프로세스(foreground process): GUI의 경우 운영체제 화면에서 맨 앞에 놓인 활성화 상태의 프로세스, 현재 입력과 출력을 사용하는 프로세스. 사용자와 즉각적인 상호작용이 가능→상호작용 프로세스.

후면 프로세스(background process): 사용자와 상호작용이 없는 프로세스. 사용자 입력 없이 작동(일괄 작업 프로세스), 전면 프로세스보다 우선순위가 낮음.

 

 

다중 큐(Muti-Queue Scheduling): 운영체제에서 프로세스를 특성에 따라 여러 개의 큐로 나누어 스케줄링하는 방식. (프로세스 성격에 따라 서로 다른 큐에 넣고, 각 큐마다 고유의 스케줄링 알고리즘을 사용하는 방식)

 

1. 고정 다중 큐(fixed muti-queue): 프로세스는 처음 큐에 들어가면 다른 큐로 이동X.

 

특징

  • 우선 순위에 따라 준비 큐를 여러 개 사용.
  • 상단 큐의 모든 작업 완료 시 하단 큐 진행→ 아사 현상 유발

 

다단계 피드백 큐(Multi-Level Feedback Queue): 프로세스 실행 상태에 따라 다른 큐로 이동 가능.

 

특징

  • 우선순위가 높은 큐에서 실행되다가 시간이 오래 걸리면 낮은 큐로 이동. →사용자 응답성과 시스템 효율성을 모두 만족시키려는 방식
  • 프로세스가 실행될 때마다 프로세스의 우선순위를 낮춤
  • 다단계 큐의 낮은 우선순위 프로세스의 아사 현상을 해결
  • 우선순위에 따라 타임 슬라이스의 크기가 다름

CPU 스케줄링 평가 방법

 

CPU 사용률(%): 전체 시스템의 동작 시간 중 프로세스들이 CPU를 사용한 비율을 측정. → 높을수록 운영체제의 성능이 좋음.

처리량: 단위 시간당 작업을 마친 프로세스의 수. →수치가 클수록 좋은 알고리즘.

 

시간

  • 대기시간: 프로세스가 생성된 후 실행되기 전까지 대기하는 시간
  • 응답시간:첫 작업을 시작한 후 첫번째 출력이 나오기까지의 시간
  • 실행시간: 프로세스 작업이 시작된 후 종료되기까지의 시간
  • 반환시간: 대기시간을 포함하여 실행이 종료될 때까지의 시간

 

FCFS(First Come First Served): 선입선출, 큐에 도착한 순서대로 CPU를 할당→ 비선점, 우선순위 동일

 

특징

  • 처리 시간이 긴 프로세스가 CPU를 차지→ 다른 프로세스들 대기, 효율성 감소
  • 만약 작업 중인 프로세스가 입출력 작업을 요청→ CPU가 작업하지 않고 쉬는 시간이 많아져 작업 효율 감소

SJF(Shortest Job First): 최단 작업 우선, 준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU를 할당.

 

특징

  • 운영체제가 프로세스의 종류시간 예측이 어려움.
  • 작업 시간이 길다는 이유로 뒤로 밀려 공평성 감소→ 아사 현상

 

HRN(Highest Response Ratio Next): 최고 응답률 우선, SJF 스케줄링에서 발생할 수 있는 아사현상 해결하기 위해 만들어진 비선점형 알고리즘.

 

특징

  • 대기 시간과 CPU 사용 시간을 고려하여 스케줄링을 하는 방식
  • 여전히 공평성이 위배되어 많이 사용X
  • 프로세스의 우선순위를 결정하는 기준

라운드 로빈 방식: 한 프로세스가 할당받은 시간 동안 작업. 작업을 완료하지 못하면 준비 큐의 맨 뒤로 이동 전환하여 다시 차례를 기다림.

 

특징

  • 선점형 알고리즘 중 가장 단순하고 대표적인 방식
  • 프로세스들이 작업을 완료할 때까지 계속 순환
  • 효과적으로 작동하려면 문맥 교환에 따른 추가 시간을 고려하여 타임 슬라이드 설정해야 함. (큰 경우: FCFS와 동일/ 작은 경우: 문맥교환 빈번→프로세스의 CPU 점유시간을 단축시켜 성능 저하 발생)

 

SRT: 라운드 로빈+SJF, CPU 할당은 남은 작업 시간이 가장 적은 프로세스를 선택. 현재 실행중인 프로세스와 큐에 있는 프로세의 남은 시간을 주기적으로 계산함.

 

'2025-1 > 운영체제' 카테고리의 다른 글

06. 교착상태  (0) 2025.04.13
05. 프로세스 동기화  (0) 2025.04.13
03. 프로세스와 스레드  (0) 2025.03.22
02. 컴퓨터시스템 구조와 성능 향상  (0) 2025.03.22
01. 커널과 인터페이스  (0) 2025.03.12

 

요리모형예시

일괄 작업 방식: 요리사가 주문서를 받은 순서대로 요리

시분할 방식: 요리사 1명이 시간을 적당히 배분하여 여러 요리를 동시에 하는 방식, 모든 요리가 제공되면 주문 목록에서 삭제

 

운영체제의 기능

 

  • 프로그램(Program): 특정작업을 수행하기 위해 작성된 코드의 집합, 실행되지 않고 저장되어 있는 소프트웨어.
  • 프로세스(Process):프로세스는 실행 중인 프로그램의 인스턴스. 프로세스는 메모리에 로드되어 CPU에서 실행되는 상태로, 프로그램의 코드뿐만 아니라 실행 중인 데이터, 프로세스 상태, 프로세스 제어 블록(PCB) 등을 포함함.
  • 프로세서(Processor): 컴퓨터 시스템에서 명령어를 처리하고 실행하는 하드웨어 장치, 명령어를 해석하고 실행하여 계산 및 논리 연산을 수행. (일반적으로는 CPU를 의미.)

프로그램 제어 블록(PCB): 운영체제가 프로세스의 정보를 관리하기 위해서 사용하는 데이터 구조. 각 프로세스에 대한 중요한 정보를 저장하며, 운영체제가 프로세스를 효율적으로 관리하고 스케줄링하는 데 필수적임.

메모리 내의 PCB와 프로세스의 위치

PCB의 주요 구성 요소

  • 프로세스 식별자(PID): 각 프로세스를 구별하는 식별 번호.
  • 프로세스 상태: 프로세스의 현재상태를 나타냄.
  • 프로세스 우선순위: 프로세스의 실행 우선 순위를 나타냄, 스케줄링 결정에 사용.
  • 프로그램 카운터(PC): 다음에 실행할 명령어 주소 저장.프로세스가 중단될 때 이 값이 저장되어 다시 실행 시 사용됨.
  • 레지스터: 프로세스 실행중에 사용되는 CPU 레지스터 값. 프로세스가 중단되기 전의 상태 저장.
  • 메모리 관련 정보: 프로세스가 사용하는 메모리 공간에 대한 정보를 포함.
  • I/O 상태 정보: 프로세스가 사용하는 입출력 장치와 관련된 정보.
  • 연결 리스트 (또는 큐 포인터): 프로세스 스케줄링을 위한 큐에 대한 포인터를 포함할 수 있음.
  • PPID와 CPID: 부모 프로세스 식별자와 자식 프로세스 식별자

프로세스 상태

  • 생성 상태(new): 메모리에 적재되어 프로세스로 변환될 준비가 된 상태
  • 준비 상태(ready): CPU 점유를 위해 기다리는 상태
  • 실행 상태(running): CPU를 점유한 상태
  • 완료 상태(end/termination): 프로세스 제어 블록이 사라진 상태

 

디스패치(Dispatch): 운영체제에서 프로세스를 CPU에 할당하고 실행을 시작하는 과정.

디스패치 단계

  1. 프로세스 선택: 운영체제의 스케줄러는 준비 상태(Ready) 큐에 있는 프로세스들 중에서 다음에 실행할 프로세스를 선택.
  2. 컨텍스트 스위칭: 선택된 프로세스가 CPU를 할당받기 전에, 현재 실행 중인 프로세스의 상태를 저장하고, 새로 선택된 프로세스의 상태를 복원하는 과정.
  3. CPU 할당: 디스패치가 완료되면, 선택된 프로세스가 CPU를 할당받고 실행 상태(Running)로 전이.
  4. 디스패치 타임: 디스패치 과정에서 소요되는 시간,이 시간은 시스템의 전체 성능에 영향을 미침.

대기 상태(waiting/blocked state): 프로세스가 실행을 중단하고 특정 이벤트나 자원의 완료를 기다리는 상태. 입출력이 완료되면 준비 상태로 이동.

보류 상태(Suspended state): 프로세스가 메모리에서 일시적으로 제거되거나 실행이 중단된 상태. (스왑영역에서 임시 보관됨.)

휴식 상태(pause state): 프로세스가 작업을 일시적으로 쉬고 있는 상태.

 

생성 상태

  • 메모리에 적재되어 프로세스로 변환될 준비가 된 상태
  • 새로운 PCB가 커널 영역에 만들어짐.
  • 프로세스가 생성이 되면 준비 상태로 이동함.

준비 상태

  • CPU 점유를 위해 기다리는 상태.
  • PCB는 준비 큐(queue)에서 차례를 기다림.
  • CPU 스케줄러에 의해 순서를 정함.

실행 상태

  • 프로세스가 CPU를 점유한 상태.
  • 자신에게 주어진 시간(타임 슬라이스)동안 CPU 점유.
  • 타임아웃 되면 준비 상태로 전환.
  • 작업이 완료되면 프로세스 종료(PCB 삭제, 소멸).
  • 입출력 요청이 있으면 대기 상태로 전환.

대기 상태

  • 실행 상태의 프로세스가 입출력(I/O)을 요청하면 입출력이 완료될 때까지 기다리는 상태.
  • 입출력 완료 인터럽트가 발생되면 준비 상태로 전환.

완료 상태

  • 프로세스가 종료된 상태.
  • 모든 잔원을 반납함. (메모리 및 PCB 폐기)

보류 상태

  • 프로세스가 준비 또는 대기 상태에서 한동안 변화가 없을 때 전환. →실행 메모리 공간 부족, 오류로 인한 실행 미루기, 바이러스와 같은 악의적인 공격을 하는 프로세스라 판단될 때, 입출력 지연등.

 

문맥 교환(Context Switching): CPU를 차지하던 프로세스를 옮기고 새로운 프로세스를 실행.

 

메모리 내 프로세스 구조

 

코드 영역: 프로그래머가 작성한 코드가 탑재(읽기 전용)

데이터 영역: 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳.

스택 영역: 함수를 수행하고 원래 프로그램으로 되돌아올 위치를 이 영역에 저장, 운영체제가 사용자의 프로세를 작동하기 위해 유지하는 영역.

힙 영역: 프로그래머가 필요할 때 사용하는 데이터 영역. 런타임시 크기가 결정됨.

 

 

fork() 시스템 호출: 실행 중인 프로세스로부터 새로운 프로세스를 생성(복사)

  • 자신과 동일한 프로세스를 자식 프로세스로 생성함.
  • 함수 결과값을 통해 부모/자식 확인 가능(부모:자식의 PID/ 자식: 0)

fork() 사용의 장점

  • 프로세스의 생성 속도가 빠름.
  • 추가 작업 없이 자원을 상속 할 수 있음.
  • 시스템 관리를 효율적으로 할 수 있음.(계층형 구조, 부모-자식 관계 구조 때문)

exec() 시스템 호출: 현재의 프로세스가 새로운 프로세스로 대체됨. 기존의 프로세스는 종료되지 않고 새로운 프로그램이 그 자리를 차지.

  • 코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 바꿈.
  • 데이터 영역이 새로운 변수로 채워 짐.
  • 스택 영역은 리셋.
  • PCB 중 PID, PPID, CPID, 메모리 관련 등은 변하지 않음 (→ 부모 프로세스로 복귀 가능)
  • 프로그램 카운터 등 각종 레지스터와 파일 정보는 리셋.

 

스레드(thread): 프로세스 내에서 실행되는 가장 작은 실행 단위, CPU를 할당받아 실행되는 기본 단위.

[작업단위: 운영체제-프로세스/ CPU-스레드]

 

멀티 태스크(multi-tasks): 하나의 업무 수행을 위해 여러 개의 프로세스로 구성하는 것.

멀티 스레드(multi-thread): 하나의 프로세스에 여러 개의 스레드로 구성하는 것. 모든 스레드는 전역 메모리 영역 등을 공유함.

 

멀티 스레드: 프로세스 내 작업을 여러 스레드로 분할해서 수행.

멀티 태스킹: 운영체제가 CPU 에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법. 하나의 CPU에서 다수의 태스크가 동작함.

멀티 프로세싱:CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경.

 

CPU 멀티 스레드

  • 파이프라인 기법을 이용.
  • 동시에 여러 스레드를 처리하도록 만든 병렬처리기법.

멀티 스레드와 CPU 멀티 스레드

  • 멀티 스레드: 운영체제가 소프트웨어적으로 프로세스를 스레드로 분할.
  • CPU 멀티 스레드: 하드웨어적인 방법. 하나의 물리적 CPU 코어가 마치 두 개의 논리적 코어로 동작→운영체제 입장에서는 멀티 프로세서(멀티 코어)로 인식함.

'2025-1 > 운영체제' 카테고리의 다른 글

06. 교착상태  (0) 2025.04.13
05. 프로세스 동기화  (0) 2025.04.13
04. CPU 스케줄링  (0) 2025.04.12
02. 컴퓨터시스템 구조와 성능 향상  (0) 2025.03.22
01. 커널과 인터페이스  (0) 2025.03.12

 

중앙 처리 장치 (CPU): 주 프로세서(main processor)

주 메모리(main memory): 작업이 필요한 프로그램과 데이터를 저장하는 장소 [데이터 접근 단위:워드(word)]

보조 기억 장치: 저장장치 혹은 데이터 스토리지

 

저장장치(디스크)

  • 메모리보다 느리지만 저렴하고 저장 용량이 큼.
  • 전원의 온・오프 상관없이 데이터를 영구적으로 저장.
  • 느린 저장장치를 사용하는 이유→저장 용량에 비해 가격이 저렴

메인보드(main board)

  • 동일어= 마더보드(mother board)
  • 다양한 부품을 연결하는 판
  • 다양한 장치들을 버스(bus)로 연결.

시스템 아키텍처

 

폰노이만 아키텍처: CPU, 메모리, 입출력장치, 저장장치가 하나의 버스로 연결되어 있는 구조.

  • 명령어와 데이터를 위한 메모리 인터페이스가 하나임.
  • 명령어를 읽을 때 데이터를 읽거나 쓸 수 없음.
  • 프로그램은 외부 저장 장치에 기록.
  • 프로그램은 바로 실행되지 않고, 기록된 데이터를 주 메모리(RAM)으로 읽어와야 함.(→모든 프로그램은 메모리에 올라와야 실행할 수 있음.)
  • 메모리의 효율적인 접근에 따라 시스템의 성능에 큰 영향을 미침.( 메모리가 유일한 작업 공간임.)

폰노이만 아키텍처
폰노이만 아키텍처

 

하버드 아키텍처: 1944년 하버드 마크 개발할 때 설계 및 적용

  • 명령어를 위한 메모리 인터페이스와 데이터를 위한 메모리 인터페이스가 분리되어 있음. (→ 동시접근, 전용메모리 최적화, 보안성등 장점 존재)
  • 버스 시스템이 복잡하여 설계가 복잡함.

하버드 아키텍처

 

클록(clock): CPU의 속도와 관련된 단위

  • 틱(Tick)= 펄스(Pulse)= 클록 틱(Clock Tick)
  • 클록이 일정 간걱으로 틱(Tick)을 만들면 거기에 맞춰 CPU 안의 모든 구성 부품이 작업 수행.
  • 헤르츠(Hz): 클록틱이 발생하는 속도를 나타내는 단위

시스템 버스: 메모리와 주변 장치를 연결하는 버스, FSB(Front-Side Bus, 전면 버스)라고 함.

CPU 내부 버스: CPU 내 구성 요소 간 연결 버스,BSB(Back-Side Bus, 후면 버스)라고 함.

CPU와 메모리의 속도

  • CPU는 내부버스의 속도로 작동
  • 메모리는 시스템버스 속도로 작동

→두 버스 속도 차이로 인한 작업 지연 해결: 캐시(cache)

캐시(cache): 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소

  • 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종, CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓음
  • 캐시 히트:캐시에 원하는 데이터를 찾음
  • 캐시 미스:원하는 데이터가 캐시에 없을 때
  • 캐시 적중률:캐시 히트가 되는 비율( 높을수록 빠른 처리 가능)
  • 즉시쓰기: 캐시의 데이터가 변경되면 이를 즉시 메모리에 반영(성능 저하)
  • 지연쓰기:주기적으로 변경된 내용을 모아 메모리에 반영(데이터 불일치 가능성 존재)

L1: 특수 캐시(명령어와 데이터 구분O), L2: 일반 캐시(명령어와 데이터 구분X)

레지스터

 

버스(bus)

 

버스의 대역폭: 한 번에 전달할 수 있는 데이터의 최대 크기

→CPU가 한 번에 처리할 수 있는 데이터의 크기와 같음

 

스풀(Spool): CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적 버퍼(예: 프린트 스풀러)

 

인터럽트

 

폴링 방식(Polling): CPU가 직접 입출력장치에서 테이터를 가져오거나 내보내는 방식

  • CPU가 입출력장치의 상태를 주기적으로 검사(반복적인 모니터링 작업으로 인해 작업 효율이 떨어짐)

인터럽트 방식(Interrupt):입출력 관리자가 대신 입출력 해주는 방식

  • CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영.( 시스템 효율을 높임.)
  • 데이터의 입출력이 이루어지는 동안 CPU가 다른 작업을 할 수 있음.
  • 인터럽트 번호: CPU에 알려주기 위해 사용하는 번호.

 

병렬처리

파이프라인 기법(=멀티 스레드): 하나의 코어에 여러 개의 스레드(Thread)를 이용하는 방식

스레드(Thread): CPU가 처리할 수 있는 작업 단위

 

멀티 프로세스 시스템

  • 컴퓨터의 성능을 높이기 위해 여러 개의 프로세스를 사용하는 시스템
  • 프로세서마다 레지스터와 캐시를 가짐
  • 모든 프로세서가 시스템버스를 통해 메인 메모리 공유

멀티 코어 시스템

  • 하나의 CPU의 여러 개의 코어를 두어 여러 작업을 동시에 처리(코어: CPU의 주요 기능을 담당)
  • 원코어(1), 듀얼코어(2), 쿼드코어(4), 옥타코어(8) 등

병렬 처리 시 고려 사항

  • 상호 의존성이 없어야 병렬처리 가능.
  • 각 단계별 처리 시간이 동일해야 함. (단계별 시간의 차이가 크면 병렬 처리의 효과가 떨어짐)
  • 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 함.

파이프라인의 위험

  • 데이터 위험: 데이터 의존성으로 인한 문제. → 파이프라인의 명령어 단계를 지연하여 해결
  • 제어 위험: 프로그램 카운터(PC) 값을 갑자기 변화시켜 발생하는 위험→ 분기 예측이나 분기 지연 방법으로 해결
  • 구조 위험: 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제 →해결 어려움

 

 

'2025-1 > 운영체제' 카테고리의 다른 글

06. 교착상태  (0) 2025.04.13
05. 프로세스 동기화  (0) 2025.04.13
04. CPU 스케줄링  (0) 2025.04.12
03. 프로세스와 스레드  (0) 2025.03.22
01. 커널과 인터페이스  (0) 2025.03.12

 

사용자: 컴퓨터를 사용하는 사람이나 장치, 다른 컴퓨터 등을 의미

소프트웨어: 컴퓨터의 기능 수행에 필요한 모든 프로그램

하드웨어: 기본 연산 자원을 제공하는 프로세서(CPU, 중앙처리장치), 메모리, 주변장치 등

 

운영체제: 사용자와 하드웨어 사이의 중간 매개체, 응용 프로그램 실행 제어, 자원 할당 및 관리, 입출력 제어 및 데이터 관리 등의 서비스를 제공하는 소프트웨어.

커널(kernel): 운영체제의 핵심부분, 하드웨어와 소프트웨어 사이에서 중재 역할. 운영체제의 가장 중요한 기능 담당, 컴퓨터 시스템을 관리하고 자원을 효율적으로 배분하는 역할.

인터페이스(interface): 사용자가 시스템과 상호작용 할 수 있도록 제공하는 기능. 사용자 인터페이스와 프로그램 인터페이스 존재.

 

운영체제의 역할

  • 자원관리
  • 자원보호
  • 하드웨어 인터페이스 제공
  • 사용자 인터페이스 제공

 

시스템 호출(system calls): 컴퓨터가 자원에 접근하기 위해 사용자 인터페이스 또는 응용 프로그램이 커널에 접근하기 위한 유일한 수단. (예: 카페의 주문대 직원) 👉커널서비스를 시스템 호출로 제한: 컴퓨터 자원 보호.

시스템 호출 방법

  • 프로그램에서 명령이나 서브루틴의 호출 형태로 호출
  • 시스템에서 명령 해석기를 사용하여 대화 형태로 호출

디바이스 드라이버(device drivers): 커널과 하드웨어의 인터페이스 역할 수행.

 

커널의 구조

 

단일형 구조 커널: 초창기 운영체제 구조. 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성.

  • 장점: 모듈간 통신 비용이 줄어들어 효율적인 운영 가능
  • 단점: 복잡한 구조로 버그 수정 어려움, 작은 결함이 시스템 전체의 영향, 호환성 부족

 

계층형 구조 커널: 유사 기능을 가진 모듈을 하나의 계층으로 구현함. 계층 간의 통신을 통해 운영체제 서비스 지원. 👉사용자 요구에 따라 커널 크기 증가, 하드웨어 용량 증가. 커널 소스의 방대함으로 오류 잡기 어려움.

 

마이크로 구조 커널: 가장 기본적인 기능만 제공. 커널의 각 모듈 세분화. 👉커널이 이식하기 쉽고 가벼워 CPU 용량이 작은 시스템에도 적용 가능.

 

가상머신(virtual machine): 운영체제와 응용 프로그램 사이에서 작동하는 중간 프로그램. 가상 머신을 이용하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보임.

'2025-1 > 운영체제' 카테고리의 다른 글

06. 교착상태  (0) 2025.04.13
05. 프로세스 동기화  (0) 2025.04.13
04. CPU 스케줄링  (0) 2025.04.12
03. 프로세스와 스레드  (0) 2025.03.22
02. 컴퓨터시스템 구조와 성능 향상  (0) 2025.03.22

+ Recent posts