[OS] 운영체제 개요 & 컴퓨터 시스템 동작원리

joyful·2024년 1월 10일
0

CS

목록 보기
11/14

1. 운영체제(Operating System)

1-1. 정의

  • 대표적인 시스템 소프트웨어
  • 컴퓨터 시스템의 자원관리하고 컴퓨터 프로그램동작하기 위한 서비스를 제공하는 프로그램들의 모음

1-2. 역할

1-2-1. 컴퓨터 시스템의 자원 관리

  • 자원
    • 하드웨어 자원 : CPU, 메모리, 키보드, 마우스, 네트워크 카드 등
    • 소프트웨어 자원 : 웹 브라우저, 워드프로세서, 게임 등)
    • 데이터
  • 컴퓨터 시스템을 효율적으로 운영하기 위함

1-2-2. 사용자 지원

  • 사용자가 내린 명령을 해석하여 실행하게 함
  • 사용자와 하드웨어 사이의 매개체 역할
  • 사용자에게 편의성을 제공하기 위함

2. 시분할 시스템(Time-sharing systems)

  • 여러 사용자나 프로세스가 CPU, 메모리, 주변 장치와 같은 동일한 시스템 리소스를 동시에 공유할 수 있도록 하는 것
  • 중앙처리장치(CPU)의 처리 시간을 아주 짧게 세분화하여 각 사용자의 프로그램에 할당하여 순서대로 복수의 처리를 실행
  • 사용자는 마치 컴퓨터를 독점하고 있는 것과 같은 착각이 듦
  • 오늘날 대부분의 시스템이 적용하고 있는 방식

3. 다중 프로그래밍 시스템(multi-programming system)

3-1. 정의

  • 여러 개의 프로세스가 메모리에 동시에 적재되는 것
  • 현재 실행 중인 프로세스가 입출력 대기를 해야 하면 실행을 기다리고 있는 다른 프로세스에 CPU를 할당 할 수 있음
  • CPU 연산과 입출력 작업을 동시에 수행 → CPU 이용도 및 시스템 처리량 향상

3-2. 메모리 분할

3-2-1. 고정 분할

메모리를 여러 개의 고정된 크기의 영역으로 분할하는 방식

3-2-1-1. 프로세스 배치 방법

  • 절대번역 및 적재
    • 각 분할영역마다 큐를 두고 큐에 들어온 프로세스는 해당 영역에만 적재되도록 하는 것
    • 프로그램 컴파일 시 프로그램 내의 주소를 절대주소로 번역하여 해당되는 특정 분할영역에만 적재
    • 장점 : 구현 용이
    • 단점 : 빈 분할이 있어도 다른 큐의 프로세스를 적재할 수 없어 효율성 낮음
  • 재배치 가능 번역 및 적재
    • 메모리 전체에 하나의 큐만 두고 모든 프로세스를 하나의 작업 큐에 넣어서 어느 분할에서든지 실행 가능하게 하는 것
    • 프로그램 컴파일 시 프로그램 내의 주소를 상대주소로 번역하여 어디든 적재가 가능
    • 장점 : 절대번역 및 적재보다 기억장치의 낭비를 줄일 수 있음
    • 단점 : 절대번역 및 적재보다 복잡함

3-2-1-2. 내부 단편화(fragmentation)

  • 고정 분할 방식에서 프로세스의 크기가 적재된 분할영역의 크기보다 작아 분할영역 내에 남게 되는(낭비되는) 메모리가 존재하는 것
  • 수행할 프로세스의 크기를 미리 알고 그에 맞춰 고정 분할을 하면 해결 가능하나 쉽지 않음

3-2-2. 동적 분할

메모리의 분할경계가 고정되지 않고 각 프로세스에 필요한 만큼의 메모리만 할당하는 방식

3-2-2-1. 외부 단편화

  • 메모리의 할당과 반환이 계속 반복됨에 따라 작은 크기의 공백이 메모리 공간에 흩어져 생기는 것
  • 공백보다 큰 프로세스가 메모리 할당을 요청하는 경우 대기해야 함

3-2-2-2. 통합과 집약

  • 외부 단편화 해결 방법
  • 통합(coalescing)
    • 인접된 공백을 더 큰 하나의 공백으로 만드는 과정
    • 과정
      1. 하나의 프로세스가 종료됨
      2. 종료된 프로세스가 차지하고 있는 메모리 영역이 다른 비어 있는 메모리와 인접하는지 조사
      3. 두 영역이 인접할 경우, 빈 공간 리스트에 새로운 공백이나 기존의 공백과 합쳐 하나의 공백으로 만듦
    • 하나의 프로세스가 일정 크기의 큰 메모리 영역이 필요할 때, 제일 큰 공백 하나로는 그 프로세스를 수행할 수 없음
  • 집약(compaction)
    • 메모리 내의 모든 공백을 하나로 모으는 작업
    • 여러 개의 작은 공백을 하나의 커다란 저장공간으로 만듦
    • 이용 가능한 기억장소가 연속으로 모이므로, 통합에서 발생했던 문제 해결

3-3. 메모리 보호

  • 프로세스가 다른 할당영역을 침범하지 않게 함
  • 프로세스가 사용할 수 있는 주소 범위를 하한-상한 레지스터 쌍 또는 하한-크기 레지스터 쌍의 값으로 제한
  • 프로세스가 제한을 넘어 운영체제를 호출하려면 시스템 호출을 통해서만 가능

4. 대화형 시스템(interactive system)

  • 프로그램이 진행되는 도중에 사용자로부터 데이터를 입력받아 프로그램 진행에 반영할 수 있는 운영체제 방식
  • 입출력이 중요한 프로그램에 사용됨 ex. DB 접근 프로그램, 동영상 플레이어 등
  • 현재 대부분의 운영체제는 대화형 운영체제임

5. 다중 처리기 시스템(multi-processor system)

5-1. 개념

  • 2개 이상의 하드웨어 처리기로 구성되어 각 처리기들이 기억 장치를 공유하거나 직접 한 처리기에서 다른 처리기로 메시지를 보냄으로써 통신이 이루어지는 시스템
  • 한 개의 운영 체제(OS)에 의해 통제됨

5-2. 구조적 모델

  • 밀결합형 방식 : 주기억 장치를 통해 자료를 교환하는 방식
  • 소결합형 방식 : 각 처리기마다 입출력 장치와 지국 기억 장치를 갖는 방식

5-3. 종류

5-3-1. 대칭 멀티프로세서

  • 각 프로세서는 유사한 운영 체제 복사본을 포함하며 모두 서로 통신함
  • 프로세서들 사이에 마스터-슬레이브 관계가 존재하지 않음(peer-to-peer)

5-3-2. 비대칭 멀티프로세서

  • 각 프로세서에 미리 정의된 작업이 제공
  • 마스터-슬레이브 관계 포함
    → 다른 모든 프로세서에 명령을 제공하는 마스터 프로세서 존재
  • 대칭 멀티프로세서가 만들어지기 전에 사용할 수 있는 유일한 유형의 멀티프로세서

5-4. 장점

  • 신뢰성 향상 : 하나의 프로세서가 실패하더라도 나머지 프로세서가 작업을 계속 실행할 수 있으므로 계속 작동할 수 있음
  • 향상된 성능 : 작업 부하를 여러 프로세서에 분산할 수 있으므로 단일 프로세서 시스템보다 더 빠르게 작업을 실행할 수 있음
  • 비용 절감 : 데이터 저장소, 주변 장치, 전원 공급 장치 등을 공유하기 때문에 장기적으로 단일 프로세서 시스템보다 저렴함
  • 향상된 병렬 처리 : 서로 다른 프로세서가 서로 다른 작업을 동시에 실행할 수 있으므로 더 큰 병렬 처리 가능

5-5. 단점

  • 더 높은 전력 소비: 단일 프로세서 시스템보다 작동하는 데 더 많은 전력이 필요하므로 시스템 운영 및 유지 관리 비용이 증가할 수 있음
  • 복잡성 증가 : 단일 프로세서 시스템보다 더 복잡하며 추가 하드웨어, 소프트웨어 및 관리 리소스 필요
  • 대용량 메인 메모리 필요 : 멀티프로세서 시스템의 모든 프로세서는 메모리를 공유하기 때문에 단일 프로세서 시스템에 비해 훨씬 더 큰 메모리 풀 필요
  • 동기화 문제 : 작업을 정확하고 효율적으로 실행하기 위해 프로세서 간의 동기화가 필요하며, 이로 인해 시스템에 복잡성과 오버헤드가 추가될 수 있음
  • 제한된 성능 향상: 모든 응용 프로그램이 멀티프로세서 시스템의 이점을 누릴 수 있는 것은 아니며, 일부 응용 프로그램은 멀티프로세서 시스템에서 실행할 때만 제한된 성능 향상을 볼 수 있음

6. 시스템 콜(System Call)

  • 운영체제에 서비스를 요청하는 메커니즘
  • 응용 프로그램이 하드웨어에 대한 제어가 필요한 경우
  • 과정
    1. 사용자 모드 : 응용 프로그램의 시스템 호출
    2. 모드 변경 : 사용자 모드 → 커널 모드
    3. 커널 모드 : 운영체제의 커널 동작, 하드웨어 제어

7. 커널(Kernel)

7-1. 정의

  • 커널 모드에서 동작하는 운영체제의 핵심요소
  • 응용 프로그램과 하드웨어 수준의 처리 사이의 가교 역할

7-2. 구성방식

7-2-1. 일체형 커널(모놀리식 커널, Monolithic Kernel)

  • 운영체제의 모든 서비스커널 내에 포함
  • 장점 : 커널 내부 요소들이 서로 효율적으로 상호작용 할 수 있음
  • 단점 : 하나의 요소라도 오류가 발생하면 시스템 전체에 장애를 일으킬 수 있음
  • Unix, Linux

7-2-2. 마이크로 커널(Micro Kernel)

  • 운영체제 요소의 대부분을 커널 외부로 분리
  • 커널 내부에는 메모리 관리, 프로세스 간 통신(InterProcess Communication: IPC), 멀티태스킹 등 최소한의 요소만 남겨 놓음
  • 장점 : 유지보수 용이, 안정성 우수
    • 새로운 서비스를 추가하여 운영체제를 확장하기 쉬움
    • 커널 외부의 요소에 문제가 발생해도 커널 자체에는 영향이 없음
  • 단점 : 성능 저하 발생
    • 커널 외부의 운영체제 요소들 사이에 데이터 전달이 필요한 경우 프로세스 간 통신이 필요함

8. 커널 모드와 사용자 모드

8-1. 커널 모드(Kernel mode) = 슈퍼바이저 모드

  • 하드웨어를 직접 제어할 수 있는 CPU의 명령어를 사용할 수 있는 모드
  • 운영체제의 커널이 동작함

8-2. 사용자 모드(User mode) = 보호 모드

  • 하드웨어를 직접 제어할 수 있는 CPU의 명령어를 사용할 수 없는 모드
  • 응용 프로그램이 동작함

8-3. 분리된 이유

  • 응용 프로그램이 하드웨어를 직접 제어할 수 있는 방법이 존재한다면 시스템의 안정성을 보장할 수 없음
  • 커널 모드에서는 운영체제만, 사용자 모드에서는 응용 프로그램만 동작하도록 함으로써 응용 프로그램이 하드웨어에 직접 접근하는 것을 막아 시스템의 안정성을 보장

9. 폴링(Polling)

  • CPU가 입출력장치의 상태를 지속적으로 확인하여 CPU가 원하는 상태가 될 때까지 기다리는 것
  • 연결된 입출력장치의 개수가 증가할수록 CPU를 점유하는 시간이 증가하여 성능 하락

10. 인터럽트(Interrupt)

10-1. 정의

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

10-2. 처리과정

  1. 인터럽트 제어기에 입출력장치가 가용상태가 되었다는 신호를 보냄
  2. 인터럽트 제어기가 CPU에 인터럽트 신호를 보냄
  3. CPU는 현재 실행 중이던 명령만 마치고 즉시 인터럽트에 응답함
  4. 인터럽트 제어기가 이벤트 대상에 대한 정보를 CPU에 보내줌
  5. CPU는 현재 상태를 보관하고 필요한 입출력 처리를 함
  6. 원래 프로세스 실행상태로 복귀함

11. DMA(Direct Memory Access)

11-1. 정의

DMA 제어기를 이용하여 CPU를 통하지 않고 메모리에 직접 접근하여 데이터를 전송하는 방법

11-2. 처리 과정

  1. CPU가 입출력에 필요한 정보(소스의 위치와 양, 목적지에 대한 정보)를 DMA 제어기에 넘김. 이 때 소스와 목적지 중 하나는 메모리가 됨
  2. DMA 제어기가 소스에서 목적지로 데이터를 보내도록 장치제어기에 요청함. CPU가 처음에 지시한 양이 될 때까지 반복함
  3. 원하는 양의 입출력이 끝나면 DMA 제어기는 인터럽트 제어기에 신호를 보냄
  4. 인터럽트 제어기가 인터럽트를 발생시켜 CPU에 입출력 작업이 모두 끝났음을 알림

11-3. 특징

  • 한 번에 입출력량이 많은 경우 인터럽트 발생 횟수를 단 한 번으로 줄여주어 CPU의 효율 향상
  • 사이클 스틸링을 통해 입출력장치 효율 향상

    💡 사이클 스틸링(Cycle Stealing)
    CPU와 DMA 제어기가 동시에 메모리에 액세스를 시도할 때 충돌을 방지하기 위해 DMA 제어기에 우선권을 주는 것


12. 동기식 I/O와 비동기식 I/O

12-1. 동기식(Synchronous) I/O

  • I/O을 시작하는 일부 실행 수단(ex. 프로세스, 스레드)이 I/O가 완료될 때까지 기다리는 방식
  • CPU가 I/O 연산이 끝날 때까지 인터럽트를 기다리게 됨(자원 낭비)
  • I/O 완료 시 동일한 실행 수단이 I/O 결과를 사용하여 다른 작업을 계속함
  • I/O의 동기화를 위해 장치별로 Queue를 두어 요청한 순서대로 처리
  • 처리 방식
    1. 사용자가 입출력 요청을 함
    2. OS Kernel로 CPU의 제어권이 넘어와서 입출력 처리와 관련된 커널의 코드가 수행되며, 입출력을 호출한 프로세스의 상태를 봉쇄 상태로 바꾸어 입출력이 완료될 때까지 CPU를 할당받지 못하도록 함
    3. 입출력이 완료되면 I/O 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려줌
    4. 프로세스의 봉쇄 상태를 해제시켜 CPU를 할당받을 수 있는 권한이 다시 생기게 됨

12-2. 비동기식(Asynchronous) I/O

  • I/O연산을 요청한 후에 연산이 끝나기를 기다리지 않고 CPU의 제어권을 I/O연산을 호출한 프로그램에게 곧바로 다시 부여하는 방식
  • I/O 요청이 디스크에서 읽어오는 요청이 아니라 디스크에 쓰는 요청이라면 쓰기 작업이 완료되기 전에도 다음 명령을 수행할 수 있으므로 비동기식 입출력이 사용될 수 있음
  • 처리 방식
    1. CPU의 제어권이 입출력을 요청한 프로세스에게 곧바로 다시 주어짐. 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리함
    2. 입출력 연산이 완료되면 인터럽트를 통해 CPU에게 알려줌. 이 시점부터 읽어온 데이터를 필요로 하는 명령을 수행할 수 있게 됨
profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글