교착상태(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

 

부속 질의(subquery): 다른 SQL 쿼리 내부에 포함된 SQL 쿼리를 의미함.

 

1.SELECT 절의 부속질의: select 절에 사용되며, 단일 값(스칼라 값)을 반환함. 각 행에 대해 한 번씩만 실행, 반환 값이 없으면 NULL 반환.

SELECT column1, (SELECT MAX(column2) FROM table2) AS max_column2
FROM table1;

 

2.FROM절 부속질의: FROM절에 사용되며, 테이블처럼 사용될 수 있는 결과 집합을 반환함. 주로 복잡한 조인 또는 집계 연산을 수행한 결과를 다시 사용하는 경우에 유용. 반드시 별칭( Alias)을 지정해야 함.

SELECT column1, column2
FROM (SELECT column1, column2 FROM table1 WHERE condition) AS subquery_alias;

 

3.WHERE절의 부속질의: WHERE절에 사용되며, 조건을 평가하는데 사용되는 값을 반환함. 비교 연산자, IN, NOT IN, EXISTS, NOT EXISTS 등과 함께 사용될 수 있음.

  • 단일 행 부속질의(Single-Row Subquery): 하나의 행만 반환, =, >, <, >=, <=, <> 등의 비교 연산자와 함께 사용.
SELECT column1
FROM table1
WHERE column2 = (SELECT column2 FROM table2 WHERE condition);
  • 다중 행 부속질의(Multiple-Row Subquery): 여러 개의 행을 반환함. IN, NOT IN, EXISTS, NOT EXISTS 연산자와 함께 사용. IN / NOT IN: 부속 질의 결과에 포함되는 / 포함되지 않는 값을 가진 행을 선택.
SELECT column1
FROM table1
WHERE column2 IN (SELECT column2 FROM table2 WHERE condition);
//EXISTS / NOT EXISTS: 부속 질의 결과가 존재하는 / 존재하지 않는 경우에만 외부 쿼리를 실행
SELECT column1
FROM table1
WHERE EXISTS (SELECT 1 FROM table2 WHERE table1.column2 = table2.column2);

 

'2025-1 > 데이터베이스' 카테고리의 다른 글

04. 정렬 쿼리, 집계 함수와 GROUP BY절, join  (0) 2025.04.10
03. 무결성 제약조건  (0) 2025.04.08
02.인덱스와 키  (0) 2025.04.08
01.DBMS  (0) 2025.04.07

 

정렬 쿼리 ORDER BY: 결과물에 대해 영향을 미치지는 않지만, 결과가 출력되는 순서를 조절하는 구문. 기본적으로는 오름차순으로 정렬됨, 내리차순으로 정렬하기 위해서는 DESC 키워드를 작성함.

SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;

ORDER BY 절은 제일 뒤에 와야 함. (성능에 영향을 미치므로 사용하지 않는 것을 권장함.)

 

GROUP BY: 특정 열의 값을 기준으로 행들을 그룹으로 묶는 데 사용.

  • GROUP BY안에 칼럼이 여러개일 경우: (GROUP BY(column1, column2);→column1을 기준으로 그룹을 만든 후 그 안에서 column2를 기준으로 하는 그룹을 만듦.

HAVING: GROUP BY절로 그룹화된 결과에 대한 필터링 조건을 지정하는데 사용됨.

  • WHERE절: 그룹화하기 전에 행에 대한 필터링 수행.
  • HAVING절: 그룹화된 결과에 대한 필터링 수행.

집계 함수(Aggregate Function): 여러 행의 값들을 모아서 단일 요약 값을 계산하는데 사용되는 함수. 일반적으로 GROUP BY절과 함께 사용되어 그룹별 요약 정보를 얻는데 유용함.

함수명 설명
COUNT(*)
COUNT(column_name)
COUNT(DISINCT column_name)
NULL 값을 포함한 모든 행의 개수 반환.
특정 열에서 NULL 값을 제외한 행의 개수를 반환.
특정 열에서 중복을 제거한 후 NULL값을 제외한 고유한 값의 개수를 반환.
SUM() 특정 열의 값들의 합계를 계산하는 함수.
AVG() 특정 열의 값들의 평균을 계산하는 함수.
MIN() 특정 열에서 가장 작은 값을 찾는 함수.
MAX() 특정 열에서 가장 큰 값을 찾는 함수.

 

JOIN: 두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것. join을 사용하면 여러 테이블에 분산되어 있는 관련 데이터를 효과적으로 조회하고 분석할 수 있음.

 

1.INNER JOIN(내부조인)

  • 두 테이블에서 조인 조건(join condition)을 만족하는 행들만 반환.
  • 조인 조건에 일치하지 않는 행은 결과에 포함되지 않음.
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

 

2. LEFT JOIN(왼쪽 조인)

  • 왼쪽 테이블(LEFT JOIN 키워드 왼쪽에 있는 테이블)의 모든 행을 반환하고, 오른쪽 테이블에서 조인 조건을 만족하는 행이 있다면 해당 행의 데이터를 함께 반환.
  • 오른쪽 테이블에 조인 조건을 만족하는 행이 없으면 오른쪽 테이블의 열은 NULL 값으로 채워짐.

3.RIGHT JOIN(오른쪽 조인)

  • 오른쪽 테이블(RIGHT JOIN 키워드 오른쪽에 있는 테이블)의 모든 행을 반환하고, 왼쪽 테이블에서 조인 조건을 만족하는 행이 있다면 해당 행의 데이터를 함께 반환.
  • 왼쪽 테이블에 조인 조건을 만족하는 행이 없다면 왼쪽 테이블의 열은 NULL 값으로 채워짐.

4.FULL OUTER JOIN(전체 외부 조인)

  • 왼쪽 테이블과 오른쪽 테이블의 모든 행 반환.
  • 조인 조건을 만족하는 행이 있으면 해당 행의 데이터를 함께 반환, 그렇지 않으면 NULL 값으로 채움.

5.CROSS JOIN(교차 조인)

  • 두 테이블의 모든 가능한 조합의 행을 반환.
  • 조인 조건 없음.
  • 결과 집합의 크기가 매우 커질 수 있으므로 주의해서 사용.

UNION:두 쿼리의 결과를 행으로 합치는 것. 대신 두 쿼리의 열의 개수가 같아야 하고, 데이터 형식도 각 열 단위로 같거나 서로 호환되는 데이터 형식이어야 함.

'2025-1 > 데이터베이스' 카테고리의 다른 글

05. 부속 질의  (0) 2025.04.10
03. 무결성 제약조건  (0) 2025.04.08
02.인덱스와 키  (0) 2025.04.08
01.DBMS  (0) 2025.04.07

 

무결성 제약조건(Integrity Constraint): 데이터베이스에 저장된 데이터의 정확성, 일관성, 유효성을 유지하기 위해 설정하는 규칙 또는 조건. 데이터베이스 시스템에 의해 자동으로 검사, 제약 조건을 위반하는 데이터의 삽입, 수정, 삭제를 방지하여 데이터의 신뢰성을 확보하는데 중요한 역할을 함.

 

1. 개체 무결성 제약조건(Entity Intergrity Constrain)

  • 목적: 테이블의 각 행을 고유하게 식별하기 위해 기본 키(Primary key)가 NULL 값을 가질 수 없도록 하는 제약 조건
  • 규칙: 기본 키를 구성하는 열은 NULL 값을 가질 수 없음, 테이블 내에서 유일.

2.참조 무결성 제약조건(Referential Intergrity Constraint)

  • 목적: 테이블 간의 관계를 설정하고 유지하기 위해 외래 키(Foreign key)가 참조하는 테이블의 기본 키 값과 일치하도록 하는 제약조건
  • 규칙: 외래 키는 참조하는 테이블의 기본 키 값과 일치하거나 NULL 값을 가질 수 있음, 값이 변경되거나 삭제될 때 함께 변경되거나 삭제됨.

3. 도메인 무결성 제약조건(Domain Intergrity Constraint)

  • 목적: 특정 열의 데이터 타입, 길이, 값의 범위 등을 제한하여 유효한 값만 입력되도록 하는 제약조건
  • 규칙: 열의 데이터 타입에 맞는 값만 입력, 열의 길이 초과하는 값 입력 불가, CHECK 제약조건을 사용하여 특정 값의 범위 또는 조건을 만족하는 값만 입력 가능.

4.사용자 정의 무결성 제약조건(User-Defined Integrity Constraint)

  • 목적: 특정 비지니스 규칙 또는 요구사항에 따라 사용자가 직접 정의하는 제약조건
  • 규칙: CHECK 제약조건, 트리거(Trigger), 저장 프로시저(Stored Procedure) 등을 사용하여 구현 가능.

5.고유 무결성 제약조건(unique Constraint)

  • 목적: 테이블의 특정 열의 값이 고유해야 하는 경우 사용.
  • 규칙: 하나의 테이블에 여러 개의 고유성 제약조건 설정 가능, NULL 값 가질 수 있음.

장점

  • 데이터 품질 향상: 데이터베이스에 저장된 데이터의 정확성, 일관성, 유효성을 유지하여 데이터 품질을 향상시킴.
  • 데이터 신뢰성 확보: 무결성 제약조건을 통해 데이터의 신뢰성을 확보, 잘못된 데이터로 인한 오류 방지.
  • 응용 프로그램 개발 효율성 향상: 데이터의 유효성 자동 검사→ 검사 로직 구현X, 개발 효율성 향상
  • 데이터베이스 유지보수 용이성 향상

'2025-1 > 데이터베이스' 카테고리의 다른 글

05. 부속 질의  (0) 2025.04.10
04. 정렬 쿼리, 집계 함수와 GROUP BY절, join  (0) 2025.04.10
02.인덱스와 키  (0) 2025.04.08
01.DBMS  (0) 2025.04.07

+ Recent posts