운영체제는 주기억장치보다 더 큰 용량의 프로그램을 실행하기 위해 프로그램의 일부만 주기억장치에 적재하여 사용한다. 이를 가상메모리 기법이라고 한다.

메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이지 부재), 어떤 페이지 프레임을 선택하여 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 한다.

 

 

 

 

페이지 교체 알고리즘 종류

1. OPT - Optimal : 앞으로 가장 오랫동안 사용되지 않을 페이지 교체

 

- 프로세스가 앞으로 사용할 페이지를 미리 알아야 한다는 전제조건이 필요

- 이 전제 조건이 실제 활용에서는 알 수 있는 방법이 없기 때문에 최적 알고리즘은 구현이 불가능한 알고리즘

- 따라서 이는 실제 구현 목적보다 다른 알고리즘과 비교 연구 목적을 위해 주로 사용

 

 

 

 


2. FIFO - First In First Out : 가장 오래된 페이지를 먼저 교체

- 이해가 쉽고, 구현이 간단하다는 장점이 존재

- 그러나 활발하게 사용 중인 페이지를 계속해서 교체한다면 페이지 부재율이 높아지고 실행속도가 떨어질 위험이 있음

 

 

 

 

 

3. LRU - Least Recently Used : 가장 오랫동안 사용되지 않은 페이지 교체

 

- 최적 알고리즘(OPT)은 실제 구현이 불가능하므로, 최적 알고리즘의 방식과 비슷한 효과를 낼 수 있는 방법을 사용한 것이 LRU 알고리즘

 

 

 

 

 

4. LFU - Least Frequently Used : 참조 횟수가 가장 작은 페이지 교체

 

- 교체 대상인 페이지가 여러 개 일 경우, LRU 알고 리즘을 따라 가장 오래 사용되지 않은 페이지로 교체

 

 

 

 

 

5. MFU - Most Frequently used : 참조 횟수가 가장 많은 페이지 교체

 

- LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘

- LFU와 MFU는 실제 사용에 잘 쓰이지 않음

(구현에 상당한 비용이 들고, 최적 페이지 교체 정책을 LRU 만큼 제대로 유사하게 구현해내지 못하기 때문)

 

 

 

 

 

6. NUR - Not Used Recently : 최근에 사용하지 않은 페이지 교체

 

- LRU에서 나타나는 오버헤드를 줄일 수 있음

- 최근 사용 여부를 확인하기 위해 각 페이지마다 두 개의 비트 사용 

  ▷ 참조비트(Reference Bit) : 페이지가 호출되지 않았을 때 0, 호출되었을 때 1

  ▷ 변형비트(Modified Bit) : 페이지 내용이 변경되지 않았을 때 0, 변경 되었을 때 1

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

프로세스 vs 스레드  (0) 2022.07.16
파일 시스템  (0) 2022.06.25
페이징(Paging) & 세그멘테이션(Segmentation)  (0) 2022.06.18
세마포어(Semaphore)와 뮤텍스(Mutex)  (0) 2022.06.18
CPU 스케줄링  (0) 2022.06.11

프로세스(Process)란?

 

  • 프로그램의 인스턴스
  • 운영체제로부터 자원을 할당받는 작업의 단위
  • 메모리에 적재되어 실행되고 있는 프로그램

 

 

 

 

 

프로세스 메모리 구조

 

 

  • Code(text) 영역 : 실행할 프로그램 코드
  • Data 영역 : 전역 변수, 정적 변수, 배열 등이 담기는 영역
  • Heap 영역 : 런타임시 동적으로 메모리 할당받는 영역 (new(), malloc() 등)
  • Stack 영역 : 지역 변수, 매개변수, 리턴 값 등의 임시적인 데이터들 담기는 영역

 

 

 

 

 

 

 

 

프로세스 특징

 

 

  • 프로세스마다 최소 1개의 스레드를 가지고 있음
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수에 접근 불가능

 

 

 

 

 

 

 

 

 

스레드(Thread)란?

 

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로세스의 특정한 수행 경로
    • ex: 햄버거를 만드는 프로세스에서는 패티를 굽는 스레드가 진행되는 동안, 빵에 야채를 얹고 소스를 뿌리는 등의 스레드도 동시에 진행될 수 있음

 

 

 

 

 

 

 

스레드의 특징

 

  • 스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유 (프로세스는 Code, Data, Stack, Heap으로 구성)
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있음

 

 

 

※ 스레드마다 독립적인 Stack을 갖는 이유

스택은 함수 호출시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

 

→ 각 스레드별로 수행하는 업무가 다를 것이기 때문에, 최소한의 독립 조건으로 스레드마다 독립된 Stack을 할당해 주는 것 (구분을 위해)

 

 

 

 

 

정리하자면...

프로세스는 컴퓨터의 자원을 분할해서 쓰지만, 스레드는 프로세스마다 주어진 전체 자원을 함께 사용한다.

≒ 프로세스는 각자의 고유 공간을 할당받아 사용하지만, 스레드는 프로세스 내에서 다른 스레드와 공간과 자원을 함께 사용한다.

 

 

 

 

 

 

 

 

 

 

참고사이트

https://hyolls100.tistory.com/5?category=1027491 

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

페이지 교체 알고리즘  (0) 2022.07.30
파일 시스템  (0) 2022.06.25
페이징(Paging) & 세그멘테이션(Segmentation)  (0) 2022.06.18
세마포어(Semaphore)와 뮤텍스(Mutex)  (0) 2022.06.18
CPU 스케줄링  (0) 2022.06.11

파일 시스템이란?

 

- 컴퓨터에서 파일이나 자료를 쉽게 발견 할 수 있도록, 유지, 관리하는 방법

- 파일의 이름을 정하고 저장 및 검색을 위해 논리적으로 어디에 위치시켜야 하는지에 대한 방법을 구성한 시스템

- 파일을 빠르게 읽기, 쓰기, 삭제 등 기본적인 기능을 원활히 수행하기 위한 목적

- 사용자 영역이 아닌 커널 영역에서 동작

 

 

 

 

 

파일 시스템의 역할

- 파일관리 : 파일 저장, 참조, 공유

- 보조 저장소 관리 : 저장 공간 할당

- 파일 무결성 메커니즘 : 파일이 의도한 정보만 포함하고 있음을 의미

- 접근 방법 : 저장된 데이터에 접근할 수 있는 방법 제공

 

 

 

 

 

파일 시스템 구조

- 메타 영역과 데이터 영역 두가지 영역으로 구분

- 메타 영역 : 데이터 영역에 기록된 파일의 이름, 위치, 크기, 시간정보, 삭제유무 등 파일의 정보

- 데이터 영역 : 파일의 데이터

 

→ 윈도우 탐색기를 이용하여 검색할 때 메타 영역을 탐색하면서 파일을 찾음

 

 

 

 

 

파일 시스템 특징

- 사용자가 파일을 생성, 수정, 제거할 수 있도록 함

- 적절한 제어 방식을 통해 타인의 파일을 공동으로 사용할 수 있도록 함

- 파일 공유를 위해 읽기만 허용, 기록만 허용, 수행만 허용 또는 이들을 여러 형태로 조합한 것 등 여러 종류의 액세스 제어 방법을 제공

- 계층적 디렉터리 구조를 가짐

  → 루트(root) 디렉토리 아래에 각 디렉토리들이 다시 또다른 하부 디렉토리들을 가지는 형태

- 디스크 파티션 별로 파일시스템을 하나씩 둘 수 있음

 

 

 

 

 

파일 시스템 개발 목적

- HDD와 메인 메모리 속도차 줄이기

- 파일 관리 용이

- HDD의 막대한 용량을 효율적으로 이용

 

 

 

 

 

주요 파일 시스템

파일을 보관하고 검색하는 기능에 있어서는 차이점이 없지만, 운영체제별로 지원하는 파일 시스템의 종류가 다름

 

Windows : FAT(FAT12/16/32,exFAT), NTFS

 

* FAT (File Allocation Table)

   - 어느 영역에 파일이 속해 있는지, 공간에 여유가 있는지, 또 어디에 각 파일이 디스크에 저장되어 있는지에 대한 정보를 중심으로 하는 테이블을 이용하는 방식

   - 상대적으로 간단한 파일 시스템. 성능이 상대적으로 다른 파일 시스템보다 좋지 않음

 

* FAT32

   - 오래되고 많이 사용되는 파일 시스템

   - 안정성이 좋고, 다양한 OS 및 기기에 대한 호환성이 좋음

 

* NTFS (New Technology File System)

   - FAT32의 약점을 보완하기 위해 개발된 파일 시스템

   - 윈도우에서는 최적화되어 있으나 Apple의 Mac OS, Google의 Android, Linux와 같은 기기에서 사용에 제한

 

 

 

Linux : ext(ext2/3/4)

 

* ext (extended file system, 파일 확장 시스템)

   - 리눅스용 파일 시스템 가운데 하나로, 오늘날 많은 리눅스 배포판에서 주 파일 시스템으로 쓰임

 

 

 

Mac OS : HFS, HFS+

 

* HFS (Hierarchical File System)

   - 애플이 Mac OS를 구동하는 컴퓨터 시스템에 사용할 목적으로 개발한 파일 시스템

 

 

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

페이지 교체 알고리즘  (0) 2022.07.30
프로세스 vs 스레드  (0) 2022.07.16
페이징(Paging) & 세그멘테이션(Segmentation)  (0) 2022.06.18
세마포어(Semaphore)와 뮤텍스(Mutex)  (0) 2022.06.18
CPU 스케줄링  (0) 2022.06.11

사전지식

 

1) 메모리란?

 

  -  프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치
  - 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치로 분류됨
    ▷ DRAM(RAM, DDR4) 등의 메모리, CPU 안에 있는 레지스터(register)와 캐쉬(cache memory) 등이 주기억장치
     SSD, HDD 등이 보조 기억장치

 


2) 가상 메모리란?


  - 메모리가 실제 메모리보다 많아 보이게 하는 기술
  - 어떤 프로세스가 실행될때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행 가능함
  - 프로그램 실행에 필요한 일부분만 메모리에 올라가며, 나머지는 디스크에 남음 (즉, 디스크가 RAM의 보조 기억장치처럼 작동 → 가상메모리의 핵심은 보조 기억장치)  
  - 가상 메모리 구현을 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖춰야함 = MMU(Memory Management Unit)
  - MMU는 가상주소를 물리주소로 변환 & 메모리를 보호하는 기능을 수행

 

 

3) (가상) 메모리 관리 기법


  - 할당정책, 호출정책, 배치정책, 교체정책 이 존재
  ≫ 페이징 기법과 세그먼트 기법은 할당정책에 해당!

 

 

4) 메모리 단편화란?

 

  - 메모리의 빈 공간이 여러 조각으로 나뉘는 현상
  - 컴퓨터에서 어떤 프로그램을 실행할 때, 메모리의 공간을 연속적인 형태로 할당하여 사용하게 됨
  - 이렇게 프로그램이 메모리에 할당되고, 해제되고, 다시 새로운 프로그램이 할당되고를 반복하다보면 메모리 공간이 조각조각 나뉘게 되어 실제로는 사용가능한 메모리가 충분히 존재하지만, 할당이 불가능한 상태가 발생함 > 이를 메모리 단편화 문제라고 함

  - 내부단편화, 외부단편화 존재
    내부단편화 : 메모리를 할당할때, 프로세스가 필요한 보다 더 큰 메모리가 할당되어 프로세스에서 사용하는 메모리 공간이 낭비되는 상황
    외부단편화 : 메모리가 할당되고 해제되는 작업이 반복적으로 발생할때, 중간중간 사용하지 않는 작은 메모리가 생김 / 총 메모리공간은 충분하지만, 실제로는 할당할 수 없는 상황을 외부 단편화라고 함

 

참조 : https://m.blog.naver.com/rbdi3222/220623825770

 

 

→ 이러한 메모리 단편화 문제 해결 방법으로 페이징과 세그멘테이션이 있음
  


 

 

페이징 기법

 

- 고정 분할 기법

- 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식

  • 페이지(Page) : 고정 사이즈의 가상 메모리 내 프로세스 조각
  • 프레임(Frame) : 페이지 크기와 같은 주 기억 장치의 메모리 조각

 

- 모든 프로세스는 하나의 페이지 테이블을 가지고 있음

- 페이지 테이블에는 각 페이지 번호와 해당 페이지가 할당된 프레임의 시작 물리 주소를 저장

- CPU는 논리 주소로 프로그램이 설정한대로 연속적인 주소값으로 명령을 내리고, 이는 메모리로 가기전에 각 페이지의 실제 메모리 주소가 저장되어 있는 테이블에서 물리 주소로 변경

- 고정 크기로 분할된 가상 메모리의 각 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 매핑되어 저장

 

 

페이징의 장단점

장점

외부 단편화 해결

 

단점

내부 단편화 문제가 발생 가능

 

 

 

 

세그멘테이션 기법

 

- 가변 분할 기법

- 프로세스의 주소 공간을 동적으로 설정되는 가변 크기의 블록들로 분할

  • 세그먼트(Segment) : 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것

 

- 세그멘테이션은 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식

- 세그먼트 테이블은 세그먼트 번호와 시작 주소(base), 세그먼트 크기(limit)를 저장

- 가상 주소의 세그먼트 번호를 이용하여 해당 세그먼트가 적재된 물리 메모리 블록의 시작 주소를 얻음

- CPU에서 해당 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트가 발생해서 해당 프로세스를 강제로 종료

 

 

세그멘테이션의 장단점

장점

내부 단편화 해결

 

단점

외부 단편화 문제가 발생 가능

 

 

 

→ 이러한 두가지 방법을 혼합한 Paging / Segmentation 기법 활용 가능

파일관리는 Segment 단위로 하고, 메모리에 올라오는 프로그램의 조각은 Page 단위로 관리

 

 

 

 

 

페이징 또는 세그멘테이션을 사용하는 이유

메모리 단편화 문제를 해결하기 위해

최초 적합, 최적 적합, 압축 등의 방식을 통해서도 단편화를 해결할 수 있지만, 메모리 계산의 비용이 적은 페이징 또는 세그멘테이션을 주로 사용

 

 

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

프로세스 vs 스레드  (0) 2022.07.16
파일 시스템  (0) 2022.06.25
세마포어(Semaphore)와 뮤텍스(Mutex)  (0) 2022.06.18
CPU 스케줄링  (0) 2022.06.11
PCB와 Context Switching(문맥교환)  (0) 2022.06.11

사전지식

 

IPC 란 Inter Process Communication의 약자로, 직역하면 프로세스간의 통신을 의미한다.
프로세스간의 통신이 가능하도록 커널에서는 IPC 통신 설비를 제공해주는데, IPC 설비 종류에도 여러가지가 있고 (PIPE, Message Queue, Socket ...) 이는 필요에 따라 선택해서 사용한다.

이러한 IPC 통신에서 프로세스 간의 데이터를 동기화하고 보호하기 위해 운영체제에서 제공하는 동기화용 커널객체가 있다.

즉, 데이터를 한번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 일종의 프로세스 동기화 메커니즘이 존재한다.

 

 

 


이걸 다른 말로 한번더 설명한다면…
운영체제 상에는 '임계구역' 이라는 것이 존재한다.


임계구역이란, 멀티 프로세스 환경에서 둘 이상의 프로세스가 동시에 접근해서는 안되는 공유자원의 코드 영역이다.
이렇게 임계 구역에 여러 프로세스 및 스레드가 함부로 접근할 수 없도록 관리를 잘 해줘야 하는데, 이를 위해 사용하는 방식에 대표적으로 세마포어(Semaphore)와 뮤텍스(Mutex)가 있다

 

 

 

 

 

세마포어 (Semaphore)

멀티 프로그래밍 환경에서 공유된 자원에 대한 접근을 제한하는 방법

 

 

뮤텍스 (Mutex)

공유 불가능한 자원의 동시 사용을 피하기 위해 사용하는 방법

→ 접근 제어를 위해 lock과 unlock 사용

- lock: 현재 임계 구역에 들어갈 권한을 얻어옴
- unlock: 현재 임계 구역을 모두 사용했음을 알림

 

 

참조) 세마포어와 뮤텍스에 대한 개념을 알기 쉽게 화장실에 비유하여 설명해준 블로그

https://worthpreading.tistory.com/90

 

→ 세마포어와 뮤텍스 둘다 공유자원에 여러 프로세스가 동시에 접근하는 것을 막는다.

 

 

 

 

 

세마포어 (Semaphore) vs 뮤텍스 (Mutex)

 

1) 세마포어

  - 현재 공유 자원의 상태를 나타내는 카운터 변수를 사용
  - 카운터 변수는 운영체제 혹은 커널에 값으로 저장

  - 각 프로세스는 해당 카운터 변수를 확인하고 변경 가능
  - 카운터 변수의 값은 1보다 더 큰 숫자도 가질 수 있음
  - 해당 변수값이 공유 자원에 접근할 수 있는 프로세스 개수의 임계치
  - 이를 조정해 접근 가능한 프로세스 개수 통제

 

 

2) 뮤텍스
  - 이진 세마포어라고도 불림 (상태가 0,1)
  - 1개의 프로세스 혹은 스레드만이 공유 자원에 접근 가능함
  - lock과 unlock
    ▷ 뮤텍스는 자원을 점유하고 있는 프로세스가 lock을 할 수 있는 권한을 가져서, 자원을 점유하기 시작할때 lock을 걸어버림
    lock을 가지고 있는 변수만이 unlock을 할 수있고, 다른 프로세스들은 unlock 상태가 될때까지 기다렸다가 나중에 해당 공유 자원에 접근 가능
     반면 세마포어는 현재 공유 자원을 사용중인 대상뿐만 아니라 다른 프로세스 및 스레드도 unlock이 가능함


 

 

 

정리하자면...

세마포어는 카운터 변수값만큼 공유 자원에 해당 프로세스(또는 스레드)가 접근 가능

뮤텍스는 오직 하나의 프로세스(또는 스레드)가 접근 가능

세마포어는 현재 수행중인 프로세스가 아닌 다른 프로세스가 unlock이 가능

뮤텍스는 lock을 획득한 프로세스가 반드시 unlock을 해야 다른 프로세스가 접근 가능

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

프로세스 vs 스레드  (0) 2022.07.16
파일 시스템  (0) 2022.06.25
페이징(Paging) & 세그멘테이션(Segmentation)  (0) 2022.06.18
CPU 스케줄링  (0) 2022.06.11
PCB와 Context Switching(문맥교환)  (0) 2022.06.11

CPU 스케줄링 (=프로세스 스케줄링)

 

프로세스 스케줄링이란, CPU를 사용하려고 하는 프로세스들 사이의 우선순위를 관리하는 작업

 

스케줄링의 목표

- 처리율, CPU 이용률↑

- 오버헤드, 응답시간, 반환시간, 대기시간 ↓

 

*오버헤드란?

어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 의미

ex. A라는 작업을 실행하는 데에 10초가 소요되는데, 안전성을 고려하여 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초

 

 

 

1. 프로세스 상태

- 생성(Create) : 사용자에 의해 프로세스가 생성된 상태

- 준비(Ready) : CPU를 할당받을 수 있는 상태

   → 준비 리스트가 존재하며, 높은 우선순위를 가진 프로세스 순서대로 CPU를 할당받음

- 실행(Running) : 프로세스가 CPU를 할당받아 동작 중인 상태

- 대기(Waiting) : 프로세스 실행 중 입출력 처리 등으로 인해 CPU를 양도하고 처리가 완료될 때까지 대기 리스트에서 기다리는 상태

- 완료(Complete) : 프로세스가 CPU를 할당받아 주어진 시간 내에 완전히 수행을 종료한 상태

 

 

 

 

 

2. 프로세스 상태 전이

- 프로세스의 상태가 준비, 실행 및 대기 상태 등으로 변하는 활동을 의미

- 활동 상태란, 프로세스가 기억장치를 할당받은 상태

- 지연 상태란, 프로세스가 기억장치를 할당받지 못한 상태

 

* 디스패치 (Dispatch) : 준비 상태 리스트에 있는 프로세스들 중 실행될 프로세스를 선정하여 CPU를 할당

타이머 런 아웃 (Timer run out = Timeout) : CPU를 할당받은 프로세스는 지정된 시간이 초과되면 스케줄러에 의해 PCB에 저장, CPU 반납 후 다시 준비 상태로 전이

블록 (Block) : 실행 상태에 있는 프로세스가 지정된 시간을 초과하기 전에 입출력이나 기타 사건 등이 발생하면 CPU를 스스로 반납하고, 입출력이 완료될 때까지 대기 상태로 전이

웨이크 업 (Wake-up) : 어느 순간 입출력이 종료되면, 대기 상태에서 준비 상태로 전이

Swap-in : 프로세스에게 다시 기억장치가 할당될 경우

Swap-out : 프로세스가 기억장치를 잃은 경우

 

 

 

 

 

3. 프로세스 스케줄링 주요 용어

- 시간 할당량 : 한 프로세스가 프로세서를 독점하는 것을 방지하기 위해 서비스되는 시간 할당량

- 서비스 시간 : 프로세스가 결과를 산출하기까지 소요되는 시간

- 응답시간(반환시간) : 프로세스들이 입력되어 수행하고 결과를 산출하기까지 소요되는 시간

- 대기 시간 : 프로세스가 자원의 할당을 대기하는 시간

 응답시간 = 대기시간 + 수행시간(=서비스 시간)

 

 

 

 

 

4. 프로세스 스케줄링 유형

 

4-1) 선점형 스케줄링

- 하나의 프로세스가 CPU를 차지하고 있을 때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식

 

 

- 장점

비교적 빠른 응답

대화식 시분할 시스템에 적합

 

*시분할 시스템이란? 여러 사용자가 각자의 단말장치를 통하여 동시에 운영체제와 대화하면서 각자의 프로그램을 실행하는 듯한 느낌을 받는 방식

 

 

- 단점

높은 우선순위 프로세스들이 들어오는 경우 오버헤드 초래

 

- 종류

1) 라운드 로빈 (Round Robin)

- 모든 프로세스는 같은 크기의 CPU 시간을 할당받음(시간 할당량)

- 프로세스가 할당된 시간 내에 처리 완료를 못하면 준비 리스트의 가장 뒤로 보내지고, CPU는 대기 중인 다음 프로세스로 넘어감

 

 

2) SRT (Shortest Remaining Time First)

- 가장 짧은 시간이 소요되는 프로세스를 가장 먼저 수행

- 남은 처리시간이 더 짧다고 판단되는 프로세스가 준비 리스트에 생기면, 언제라도 프로세스가 선점됨

 

 

3) 다단계 큐 (MLQ: Multi Level Queue)

- 어떤 프로세스냐에 따라서 여러 종류의 그룹으로 분류하고, 여러개의 큐에 다양한 알고리즘을 적용하는 스케줄링 방식

   → 운영체제는 프로세스를 분류할때 보통 사용자와 상호작용하는 앞단의 프로세스(ex.구글검색)를 중요하게 여기고, 백그라운드에서 돌아가는 프로세스들 (ex.압축풀기, 영화다운로드)은 상대적으로 덜 중요하다고 판단

- 각각의 큐는 자신의 스케줄링 알고리즘(RR, FCFS 등)을 수행

 

 

4) 다단계 피드백 큐 (MFQ: Multi Level Feedback Queue)

- 다단계 큐와 비슷하지만, 프로세스들이 큐를 이동할 수 있음

- 새로운 프로세스는 높은 우선순위, 프로세스의 실행시간이 길어질수록 점점 낮은 우선순위 큐로 이동하고 마지막 단계는 라운드 로빈 방식을 적용

 

 

 

 

 

4-2) 비선점형 스케줄링

- 하나의 프로세스가 CPU를 할당받으면 작업 종료 후 CPU 반환 시까지 다른 프로세스는 CPU 점유가 불가능한 스케줄링 방식

 

 

- 장점

응답시간 예상 용이

모든 프로세스에 대한 요구를 공정하게 처리

 

- 단점

짧은 작업을 수행하는 프로세스가 긴 작업 종료시까지 대기해야 함

 

- 종류

1) 우선순위 (Priority)

- 프로세스별로 우선순위가 주어지고, 해당 우선순위에 따라 CPU를 할당함

- 동일 순위는 FCFS(FIFO)로 처리

 

 

2) 기한부 (Deadline)

- 작업들이 명시된 시간이나 기한 내에 완료되도록 계획

 

 

3) FCFS (First Come First Service) = FIFO (FIRST IN FIRST OUT)

- 프로세스가 대기 큐에 도착한 순서에 따라 CPU를 할당받음 (도착 순서대로 처리)

 

 

4) HRN (High Resposne Ratio Next)

- 대기 중인 프로세스 중 현재 응답률(Response Ratio)이 가장 높은 것을 선택 (우선순위를 계산하여 선택)

- HRN의 우선순위 : (대기시간 + 서비스시간) / 서비스시간

 

 

5) SJF (Shortest Job First)

- 프로세스가 도착하는 시점에 따라 그 당시 가장 작은 서비스 시간을 갖는 프로세스가 종료시까지 자원을 점유

 

* SRT vs SJF

SRT는 다른 프로세스가 실행 중에, 서비스 시간이 짧은 프로세스가 생기면 언제든지 자원을 점유할 수 있음

반면 SJF는 한번 서비스 시간이 가장 짧은 프로세스가 자원을 점유하게 되면, 해당 작업이 끝날 때까지 계속 자원을 점유

 

 

 

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

프로세스 vs 스레드  (0) 2022.07.16
파일 시스템  (0) 2022.06.25
페이징(Paging) & 세그멘테이션(Segmentation)  (0) 2022.06.18
세마포어(Semaphore)와 뮤텍스(Mutex)  (0) 2022.06.18
PCB와 Context Switching(문맥교환)  (0) 2022.06.11

PCB (Process Control Block)

 

1. PCB (=TCB (Task Control Block)) 란?

- 특정 프로세스에 대한 정보를 담고있는 자료구조

- 운영체제는 PCB에 담긴 프로세스 정보를 이용하여 프로세스를 관리, 제어함

- 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 제거됨

 

  + 프로세스란?
  - 프로그램의 인스턴스

  - 운영체제로부터 자원을 할당받는 작업의 단위
  - 메모리에 적재되어 실행되고 있는 프로그램
    → 하나의 프로그램에서는 여러개의 프로세스 실행 가능
         ex. 메모장이라는 프로그램을 여러 번 동작시키면, 여러개의 메모장(프로세스)이 실행됨
  - 프로세스 메모리 구조
    ○ code(text) 영역 : 실행할 프로그램의 코드
    ○ data 영역 : 전역 변수, 정적 변수 담기는 영역
    ○ stack 영역 : 지역 변수, 매개변수같은 임시적인 데이터들 담기는 영역
    ○ heap 영역 : 런타임시 동적으로 메모리 할당받는 영역

 

 

 

 


2. PCB에 저장되는 프로세스 정보 (Process Metadata)

- Process ID : 프로세스 고유 식별 번호 (PID : Process Identification Number)
- Process State : 프로세스의 상태 - 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated)
- Process Priority (프로세스 우선순위) 
- Program Counter : 프로세스가 다음에 실행할 명령의 주소를 가리킴 (CPU가 해당 값을 통해 프로세스의 명령을 수행)
- Process Register : 프로세스의 레지스터 상태를 저장하는 공간
- Pointer : 부모/자식 프로세스에 대한 포인터
- 메모리 관리정보, 프로세스 계정정보, 입출력 상태정보 등등

 

 

정리하자면..
프로그램 실행 → 프로세스 생성 → 프로세스 주소공간(메모리구조)에 코드, 데이터, 스택 생성 → 프로세스의 메타데이터들이 PCB에 저장

*메타데이터란? 데이터에 대한 데이터 (ex. 파일생성날짜, 시간, 파일생성된 위치, 수정일자, 파일크기 등)

 

 

 

 

 

3. PCB가 필요한 이유?

CPU에서는 프로세스 상태에 따라 교체작업이 이루어짐 (for 문맥교환 - 아래에서 설명)

 

→ 프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 가져와 하던 작업을 마저 진행

 

 

 

 

 

4. PCB는 어떻게 관리되는지?

- Linked List (연결리스트) 형태로 관리
- PCB List Head에 PCB들이 생성될때마다 붙게됨
- 주소값으로 연결이 이루어져있는 연결리스트

 

 

 

 

 

Running 상태 (수행 중)의 프로세스 정보는 CPU 레지스터에 저장됨

따라서 수행중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching (문맥교환)이라고 함

 

  +레지스터란?
  - 레지스터(Register)에도 다양한 종류가 있는데, 이 글에 해당하는 건 CPU 레지스터로, CPU 내부에서 처리할 명령어나 연산의 중간 결괏값 등을 일시적으로 저장하는 기억장치를 의미함

  - 레지스터는 메모리 계층의 최상위에 위치하며, 간단하게는 가장 빠른 속도로 접근 가능한 메모리 정도로 기억하자.

 

  실제 컴퓨터에서 데이터를 영구적으로 저장하기 위해서는 하드디스크에 저장하고, 임시적으로는 메모리(RAM)에 저장함

  메모리(RAM)와 하드디스크에 데이터를 보내기 위해선, 이들에 대한 주소와 명령의 종류를 저장할 수 있는 기억공간이 하나 더 필요

     → 이런 역할들을 하는것이 CPU 옆에 붙어있는 레지스터

 

 

 

 

 

 

 


Context Switching (문맥교환)

 

1. 문맥교환이란?

- 현재 CPU가 실행하고 있는 프로세스 정보를 `문맥` 이라고 함 → 이를 교환하는 행위가 문맥 교환(Context Switching)

- 현재 실행 중인 프로세스 정보를 담고 있는 CPU 레지스터의 내용이 다음 실행할 프로세스의 정보로 변경되는 것을 의미

- 위에서 설명했던 PCB가 필요한 이유는 바로 Context Switching (문맥교환)을 위해서

 

 

 

 

 

2. Context Switching(문맥교환)이 필요한 이유

만약 컴퓨터가 매번 하나의 Task만 처리할 수 있다면, 다음 Task 처리를 위해 현재 Task가 끝날 때까지 기다려함

→ 반응속도가 매우 느리고 사용하기 불편

 

컴퓨터가 멀티태스킹을 통해 빠른 반응속도로 응답하며, 다양한 작업들이 실시간으로 처리되는 것처럼 보여지는 이유는 Context Switching이 이루어지고 있기 때문

 

 

 

 

 

3. Context Switching 시나리오

EX)

1. 프로세스 A에서 인터럽트 발생

2. A의 현재 상태 정보를 PCB에 저장

3. A를 대기 상태로 돌리고 프로세스 B를 실행 상태로 전환

4. B의 PCB에서 프로세스 상태 정보가 CPU에 재로딩

5. B가 원하는 동작을 모두 수행

6. B의 현재 상태 정보를 PCB에 저장

7. B를 대기 상태로 돌리고 A를 실행 상태로 전환

8. A의 PCB 정보를 기반으로 실행 재개

 

*인터럽트란?

프로그램을 실행하는 도중 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 작업을 복귀하는 것

 

 

 

정리하자면..

문맥교환은 프로세스가 Ready → Running , Running → Ready , Running → Block 등등 처럼 상태 변경 시에 발생하는 것

 

 

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

프로세스 vs 스레드  (0) 2022.07.16
파일 시스템  (0) 2022.06.25
페이징(Paging) & 세그멘테이션(Segmentation)  (0) 2022.06.18
세마포어(Semaphore)와 뮤텍스(Mutex)  (0) 2022.06.18
CPU 스케줄링  (0) 2022.06.11

+ Recent posts