CPU의 구성

 

(1) 연산장치 (=산술논리연산장치)

- 산술 연산, 논리 연산 수행

- 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보냄

 

(2) 제어장치

- 명령어를 순서대로 실행할 수 있도록 제어

- 주기억장치에서 프로그램 명령어를 꺼내와 해독하고, 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보냄

 

(3) 레지스터

- 고속 기억장치

- 명령어 종류, 코드, 연산에 필요한 데이터 및 결과 등을 임시적으로 저장

- 용도에 따라 범용 레지스터, 특수 목적 레지스터로 구분

 

 

특수 목적 레지스터

  • 메모리 주소 레지스터(MAR, Memory Address Register) : 읽기와 쓰기 연산을 수행할 주기억장치의 주소를 저장
  • 프로그램 카운터(PC, Program Counter) : 다음에 수행할 명령어의 주소를 저장
  • 명령어 레지스터(IR, Instruction Register) : 현재 실행 중인 명령어를 저장
  • 메모리 버퍼 레지스터(MBR, Memory Buffer Register) : 주기억장치에서 읽어온 데이터나 주기억장치에 저장할 데이터를 임시로 저장
  • 누산기(AC, Accumulator) : 연산 결과를 임시로 저장

 

 

 

 

 

 

 

CPU의 동작 과정

1. 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 주기억장치가 읽어옴

 

2. CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고, 결과를 다시 주기억장치에 저장 (명령어 사이클 수행 - 아래 참조)

 

3. 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보냄

 

4. 제어장치는 명령어가 순서대로 실행되도록 각 장치를 제어

 

 

 

 

 

 

 

명령어 세트

- CPU가 실행할 명령어의 집합

- 연산 코드(Operation Code) + 피연산자(Operand) 로 구성

  * 연산 코드: 실행할 연산

  * 피연산자: 필요한 데이터 또는 저장 위치

 

 

 

 

명령어 사이클

- CPU는 프로그램 실행을 위해 주기억장치에서 명령어를 순차적으로 인출하여 해독하고 실행하는 과정을 반복

- CPU가 주기억장치에서 한번에 하나의 명령어를 인출하여 실행하는데 필요한 일련의 활동을 '명령어 사이클' 이라고 함

- 명령어 사이클은 인출, 실행, 간접, 인터럽트 사이클로 나누어짐

 

 

주기억장치의 지정된 주소에서 하나의 명령어를 가져오고(인출 사이클), 실행 사이클에서는 명령어를 실행 → 하나의 명령어 실행이 완료되면 그 다음 명령어에 대한 인출 사이클 시작

 

 

 

< 인출 사이클과 실행 사이클에 의한 명령어 처리 과정 >

  • PC에 저장된 주소를 MAR로 전달
  • 저장된 내용을 토대로 주기억장치의 해당 주소에서 명령어 인출
  • 인출한 명령어를 MBR에 저장
  • 다음 명령어를 인출하기 위해 PC 값 증가시킴
  • 메모리 버퍼 레지스터(MBR)에 저장된 내용을 명령어 레지스터(IR)에 전달
  • 인출 사이클 이후에는 실행 사이클 수행 → 명령어만 실행하면 되기 때문에 PC를 증가할 필요없이 IR에 저장된 MBR의 값을 AC에 더해주기만 하면 됨

 

* PC (Program Counter, 프로그램 카운터) : 다음에 수행할 명령어의 주소를 저장

* MAR (Memory Address Register, 메모리 주소 레지스터) : 주기억장치의 주소를 저장

* MBR (Memory Buffer Register, 메모리 버퍼 레지스터) : 주기억장치 관련 데이터 임시 저장 공간

* IR (Instruction Register, 명령어 레지스터) : 현재 실행 중인 명령어 저장

* AC (Accumulator, 누산기) : 연산 결과를 임시로 저장

 

'CS > 컴퓨터구조' 카테고리의 다른 글

컴퓨터 구성  (0) 2022.07.02

 

 

컴퓨터 시스템 =  소프트웨어 + 하드웨어

 

  • 소프트웨어 : 하드웨어의 동작을 지시하고 제어하는 명령어의 집합
  • 하드웨어 : 컴퓨터를 구성하는 기계적 장치

 

 

 

컴퓨터 구조란?

하드웨어를 구성하는 각 장치의 특성과 동작 원리를 다루는 학문

 

 

- 하드웨어는 중앙처리장치(CPU), 기억장치(Memory), 입출력장치(I/O)로 구성

- 각 장치는 시스템 버스로 연결

 

 

 

 

 

 

 

 

 

중앙처리장치(CPU)

- 인간의 두뇌와 같은 역할
- 주기억장치에서 프로그램 명령어와 데이터를 읽어와 처리
- 명령어 수행 순서 제어

- 소형 컴퓨터에서는 중앙처리장치를 마이크로프로세서라고도 함

- 세부 구성
   (1) ALU (Arithmetic and Logic Unit)

       → 산술논리연산장치

       → 비교와 연산을 담당


   (2) CU (Control Unit)

       → 제어장치 : 각 컴퓨터 구성요소를 제어할 제어신호를 생성하여 관리

       → 명령어 해석과 실행 담당


   (3) Register

       → 속도가 빠른 데이터 기억장소

       → 명령어를 실행하기 위해 필요한 데이터와 상태, 명령어를 저장  

 

   (4) Internal Bus (내부버스)

       → CPU 내부의 구성요소 간 데이터 전달과 연결을 위한 경로

 

 

CPU 작동 원리 관련 내용은 해당 포스팅 참조

https://ynsseon.tistory.com/8

 

중앙처리장치(CPU) 작동 원리

CPU의 구성 (1) 연산장치 (=산술논리연산장치) - 산술 연산, 논리 연산 수행 - 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보냄 (2) 제어장치 - 명령어를 순서대로

ynsseon.tistory.com

 

 

 

 

 

 

 

기억장치

- 프로그램, 데이터, 연산의 중간 결과값 등을 저장하는 장치
- 주기억장치와 보조기억장치로 나눠짐

     (1) 주기억장치

         → 현재 CPU가 처리하고 있는 내용을 저장하는 기억장치

         → RAM과 ROM이 존재

 

* RAM (Random Access Memory) : 휘발성 메모리, 읽고 쓰기 모두 가능, 응용 프로그램 및 운영체제 등을 불러와 CPU가 작업할 수 있도록 하는 기억장치

* ROM (Read Only Memory) : 비휘발성 메모리, 기억된 데이터를 읽기만 가능한 장치, 데이터 저장 후 반영구적으로 사용 가능

 

     (2) 보조기억장치

         → 물리적인 디스크가 연결되어 있는 기억장치

         → 데이터를 영구적으로 보관 가능

         → HDD(Hard Disk Driver), SSD(Solid State Driver) 존재

 

- CPU는 Store / Load 방식으로 주기억장치에 액세스

     (1) 적재(Load)    CPU Register ☜ 기억장치

        → 주소버스를 통해 CPU가 요구하는 데이터의 주소값과 제어 버스를 통해 Read 신호가 기억장치에 전달

        → 기억장치에 저장된 데이터를 읽어 CPU의 레지스터로 적재

 

     (2) 저장(Store)    CPU Register ☞ 기억장치

        → 주소 버스를 통해 특정 주소와 제어버스를 통해 Write 신호가 기억장치에 전달

        → CPU의 레지스터에서 기억장치의 특정 주소에 데이터를 저장

 

 

 

 

 

 

 

입출력장치

- 입력장치와 출력장치로 나눠짐
- 입력장치 : 키보드, 마우스, 조이스틱 등
- 출력장치 : 프린터, 모니터, 스피커 등

 

 

 

 

 

 

 

시스템버스

- 하드웨어 구성 요소를 물리적으로 연결하는 선
- 각 구성 요소가 다른 구성 요소로 데이터를 보낼 수 있는 통로
- 용도에 따른 분류
  (1) 데이터 버스

     * 중앙처리장치 ↔ 기억장치, 입출력장치 (양방향 버스)

     * 컴퓨터 구성 요소 간에 데이터를 전달함

 

  (2) 주소 버스

     * 중앙처리장치 → 주기억장치, 입출력장치 (단방향 버스)

     * 기억 장치의 주소 또는 입출력 장치의 포트번호를 지정하고 전달

     * 데이터를 정확히 실어 나르기 위해서는 기억장치의 '주소'를 정해주어야 함 

 

  (3) 제어 버스

     * 컴퓨터 구성 요소간에 제어 신호를 전달함 (양방향 버스)

     * 제어 신호에는 기억장치 읽기 및 쓰기, 버스 요청 및 승인, 인터럽트 요청 및 승인, 클락, 리셋 등이 있음

 

 

'CS > 컴퓨터구조' 카테고리의 다른 글

중앙처리장치(CPU) 작동 원리  (0) 2022.07.02

UDP란?

 

- User Datagram Protocol의 약자

 

- TCP/IP 5계층에서 Transport Layer(전송계층)의 프로토콜

 

- TCP와는 다르게 데이터를 패킷으로 나누고 반대편에서 재조립하는 과정을 거치지 않으며, 수신지에서 제대로 받던 받지 않던 상관 안하고 데이터를 보내기만 함

 

- 흐름제어, 오류제어, 또는 손상된 세그먼트의 수신에 대한 재전송 하지 않음

 

- 단순 오류탐지만을 함 → 흐름제어나 오류제어 등의 기능은 어플리케이션에서 처리해주어야 함

 

- TCP 보다 신뢰성이 떨어지지만(비신뢰성), 전송 속도가 일반적으로 빠른 프로토콜 → 소량의 데이터 전송 시에는 UDP를 이용하는 것이 효율적

 

- Connectionless → 비연결성 (3 way-handshake X)

 

 

 

 

 

 

 

UDP 구조

- Source Port : 해당 패킷을 만든 송신자의 어플리케이션 포트번호
- Destination Port : 해당 패킷을 수신할 어플리케이션 포트번호
- Length : UDP헤더와 데이터를 포함한 전체 길이를 Byte 단위로 표시
- 데이터가 전송 중 손상되지 않고 원본과 동일한지 여부를 확인하는 기능을 제공 (오류탐지)

 

 

 

 

 

UDP를 사용하는 이유

- UDP의 결정적인 장점은 데이터의 신속성 (데이터의 처리가 TCP보다 빠름)
- 주로 실시간 방송과 온라인 게임에서 사용

 

신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고, 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용

 

 

 

* (참고) TCP와 UDP의 차이를 잘 설명해준 블로그
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

 

 

 

 

UDP 기반의 프로토콜


* TFTP (Trivial File Transfer Protocol)


  - FTP(File Transfer Protocol)와 마찬가지로 파일을 전송하기 위한 프로토콜

  - FTP보다 더 단순한 방식으로 파일 전송

 

 

* SNMP (Simple Network Management Protocol)


  - 네트워크 장비를 관리 감시하기 위한 목적

  - 네트워크 관리자가 네트워크 성능을 관리하고, 네트워크 문제점을 찾아 수정하는데 도움을 줌

 

 

* DHCP (Dynamic Host Configuration Protocol) 


  - 동적으로 IP주소를 할당해주는 프로토콜

 

 

* NFS (Network File System)

 

  - 네트워크 상에서 파일시스템을 공유하도록 설계된 파일 시스템

 

 

* DNS (Domain Name System) 


  - 호스트의 도메인 이름(사람이 이해하기 쉬운)  ↔  네트워크 주소 (컴퓨터가 이해하기 쉬운 IP주소)

 

 

* RIP (Routing Information Protocol)


  - 동적 라우팅 정보 프로토콜 (LAN 구간에서 사용되는 프로토콜)

 

라우팅 프로토콜이란, 라우터가 패킷을 목적지까지 전달하기 위해 인접한 라우터 사이에서 경로 정보를 작성하고 제어하는 프로토콜을 의미한다.

 

정적 라우팅은 최종 목적지까지 경로를 직접 설정하여 통신을 한다고 하면,

동적 라우팅은 라우터에 경로를 설정하는 것이 아닌 각각의 라우터가 자신의 정보를 다른 라우터에게 "광고"하도록 하여 서로 자신의 정보를 교환하며 직접적인 경로 설정 없이 목적지까지 도달할 수 있도록 한다.

'CS > 네트워크' 카테고리의 다른 글

HTTP & HTTPS  (0) 2022.08.10
흐름제어 & 혼잡제어  (0) 2022.08.09
TCP 3 & 4 way handshake  (0) 2022.08.09
OSI 7계층  (0) 2022.08.09
대칭키 공개키  (0) 2022.07.23

파일 시스템이란?

 

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

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

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

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

 

 

 

 

 

파일 시스템의 역할

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

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

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

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

 

 

 

 

 

파일 시스템 구조

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

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

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

 

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

 

 

 

 

 

파일 시스템 특징

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

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

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

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

  → 루트(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