tanficial 개발 일기
운영체제의 구조와 기능 본문
이번 포스팅에서는 운영체제의 구조와 기능에 대해 정리하도록 하겠습니다.
저번 포스팅까지 운영체제가 무엇인지, 컴퓨터 시스템은 어떤 구조로 되어있는지 간단하게 살펴보았습니다. 이제 운영체제가 어떻게 구성되어 있는지 어떤 기능을 가지고 어떤 일을 하는지 쪼금 더 운영체제에 대해 알아보도록 하겠습니다.
운영체제의 구조
운영체제는 시스템 소프트웨어의 하나로, 하드웨어 바로 위에 올라가 사용자나 어플리케이션이 하드웨어 자원을 편하고 효율적으로 사용하기 위한 소프트웨어입니다. 위 사진의 운영체제라고 표시된 부분이 운영체제입니다.
어플리케이션과 하드웨어의 중간다리 역할을 하는 것이 운영체제입니다. 그중 커널은 운영체제의 가장 핵심적인 역할을 합니다. 운영체제의 주요 기능인 자원 관리를 비롯해 보안, 외부 장치 관리까지 운영체제의 중요한 기능을 담당하고 있습니다. 이 커널을 항상 메모리에 올라가 실행되고 있는 상태입니다. 이를 메모리에 상주하고 있다고 해서 상주 프로그램이라고도 합니다. 커널과 동의어로 핵, 관리자 프로그램, 상주 프로그램, 제어 프로그램이라는 용어를 사용하기도 합니다.
시스템 콜 인터페이스는 어플리케이션이나 사용자가 하드웨어를 사용하기 위해 커널에 명령을 내리기 위한 인터페이스입니다. 어플리케이션은 직접 하드웨어에 접근하지 못합니다. 대신에 하드웨어 자원이 필요하면 시스템 콜을 호출하여 커널에 명령을 내리고 운영체제로부터 자원을 할당받아 사용합니다.
1. 단일 구조
운영체제의 모든 기능이 커널 내에 들어가 있는 구조를 말합니다. 커널 내의 모듈들이 모두 서로 간 직접적으로 통신하여 효율적인 자원관리와 사용이 가능합니다. 하지만 커널의 크기가 커진다는 단점이 있어 요류 및 버그, 추가 기능 구현 등의 유지보수가 어렵습니다. 또한, 동일 메모리에 모든 기능이 있어, 한 모듈의 문제가 전체 시스템에 영향을 끼칩니다.
장점
- 커널 내 모듈 간 직접 통신 → 효율적인 자원 관리 및 사용
단점
- 커널의 거대화 → 오류 및 버그, 추가 기능 구현 등 유지보수 어려움, 한 모듈에 이상이 생기면 전체 시스템에 영향
2. 계층 구조
커널의 기능이 계층별로 나뉘어 있는 구조를 가진 운영체제입니다. 비슷한 역할을 하는 모듈을 그룹화하여 계층적으로 구성한 운영체제입니다. 기능별로 모듈화 하여 계층 간 검증과 수정 등 유지 보수가 용이하며, 설계와 구현이 단순해집니다. 하지만 각 계층은 인접한 계층과만 상호작용 할 수 있어, 필요한 기능을 수행하기 위해서는 높은 계층부터 차례로 다음 기능을 거쳐 원하는 기능을 수행해야 합니다. 따라서 단일 구조보다 성능이 떨어집니다.
장점
- 모듈화 : 계층 간 검증 및 수정 용이
- 설계 및 구현의 단순화
단점
- 단일 구조 대비 성능 저하
- 원하는 기능 수행을 위해 여러 계층을 거쳐야 함
3. 마이크로 커널 구조
커널의 크기를 최소화한 운영체제입니다. 필수적인 기능만 커널에서 수행토록 하고 나머지는 시스템 프로그램이나 사용자 프로그램으로 만들어 사용자 영역에서 수행하는 방법입니다. 운영체제의 기능이 사용자 영역에서 수행되기 때문에 운영체제의 기능 확장에 유리하다는 장점이 있습니다. 새로운 기능을 추가하기 위해 커널을 건드릴 필요 없이 새로운 기능을 수행하는 프로그램을 사용자 영역에서 수행하는 식으로 운영체제의 확장이 가능합니다. 또한 커널의 크기가 작아 다른 하드웨어로의 이식이 용이하다는 장점도 있습니다. 하지만 사용자 영역에 있는 모듈과의 통신이 많아질수록 성능이 저하된다는 단점이 있습니다.
장점
- 커널의 크기 최소화 : 운영체제 확장, 이식 용이
단점
- 모듈과 통신이 빈번하면 성능이 저하될 수 있다.
운영체제의 기능
1. 프로세서(CPU) 스케줄링
하나의 프로세서는 한 번에 한 개의 프로그램만 실행할 수 있습니다. 따라서 많은 프로그램을 동시에, 효율적으로, 균등하게 실행하기 위해서 프로세서(cpu) 스케줄링이라는 기능을 수행합니다.
프로그램들은 번갈아가며 프로세서라는 자원을 할당받아 실행됩니다. 이때 프로세서를 할당받지 못한 프로그램은 대기를 하게 되는데, 큐라는 자료구조에 들어가 대기하게 됩니다. 어떤 기준에 따라 운선순위가 높은 프로그램부터 큐에서 빠져나와 프로세서를 할당받아 실행되는데, 이 기능을 프로세서(cpu) 스케줄링이라고 합니다.
FCFS(First-Come First-Served), SJF(Shortest-Job-First), RR(Round Robin) 등의 기법이 있으며, 이는 추후 해당 포스팅에서 더 자세히 다루도록 하겠습니다.
- FCFS(First-Come First-Served) : 먼저 온 작업에 먼저 프로세서를 할당하는 기법
- SJF(Shortest-Job-First) : 수행 시간이 가장 짧은 작업에 먼저 프로세서를 할당하는 기법
- RR(Round Robin) : 각 프로세스가 동일한 CPU 할당 시간을 가지고, 할당 시간이 지나면 프로세서를 빼앗기고 다시 큐에 들어가 프로세서 할당을 기다리는 기법
2. 프로세스 관리
커널에 등록된 실행 단위를 프로세스라고 합니다. 쉽게 말해 실행 중인 중인 프로그램을 프로세스라고 합니다. 디스크와 같은 보조기억장치에 저장된 상태를 프로그램이라고 하며, 프로그램의 데이터가 메인 메모리에 올라가 실행 중인 상태를 프로세스라고 합니다. 앞에서 계속 프로그램이라고 언급하였지만 실행 중이고, 운영체제에 의해 관리되고 있으면 프로세스라고 하는 게 더 정확합니다.
운영체제는 이 프로세스를 관리하는 기능을 수행합니다. 프로세스를 생성하고 삭제하고, 프로세스의 상태를 관리합니다. 프로세스에 자원을 할당하고 그 자원을 다시 반환합니다. 또한 프로세스 간 통신 기능을 제공하고, 이런 프로세스를 동기화하며, 여러 프로세스들 사이에 발생하는 교착상태를 해결하는 기능을 제공합니다.
- 프로세스 생성 및 삭제
- 프로세스 상태 관리
- 프로세스 자원 할당 및 반환
- 프로세스 간 통신 및 동기화
- 교착상태 해결
3. 메모리 관리
프로그램이 실행상태가 되려면 메인 메모리에 올라가야 합니다. 하지만 메인 메모리는 용량이 적어 제한적입니다. 운영체제는 이런 메인 메모리를 효율적으로 사용하도록 메모리를 관리하는 기능을 가지고 있습니다.
프로그램이 메모리에 올라갈 때 가상 메모리라는 단계를 거칩니다. 보통 프로그램은 메인 메모리 용량보다 크기 때문에 한 번에 모두 올라가지 못합니다. 때문에 디스크(디스크 내 스왑 영역)에 각각의 프로그램만의 가상 메모리 영역이 만들어집니다. 프로그램의 데이터는 해당 가상 메모리 영역에 올려지고 그중 당장 필요한 부분만 메모리에 올려져 프로세스를 수행합니다. 메모리에서 사용되다가 필요 없어지면 스왑 영역의 가상 메모리에 다시 보내집니다.
운영체제는 메인 메모리에 올려진 데이터 중 어떤 걸 스왕 영역으로 내릴지를 결정해 스왑 영역으로 보내는 기능을 합니다. 이때 메모리에 적재하고 내리는 단위를 페이지라 하고, 어떤 페이지를 스왑 영역으로 내릴지 결정하는 기법으로 FIFO, LRU, LFU 등의 알고리즘이 있으며, 나중에 해당 주제 포스팅에서 자세히 다루도록 하겠습니다.
- FIFO(First-In Fisrt-Out) : 가장 먼저 적재된 페이지를 삭제하는 기법
- LRU(Least Recently Used) : 가장 오래전에 참조된 페이지를 삭제하는 기법
- LFU(Least Frequently Used) : 참조 횟수가 가장 적은 페이지를 삭제하는 기법
4. 디스크 스케줄링
디스크는 여러 원판이 회전하고 있고 하나의 헤더가 움직이면서 데이터에 접근합니다. 이때 헤더의 움직임을 최소화해야 데이터를 가져오는 시간이 단축돼 효율적으로 데이터를 가져올 수 있습니다. 헤더를 어떻게 움직여 효율적으로 데이터를 가져올지 또한 운영체제가 가지고 있는 디스크 스케줄링 기능입니다.
디스크 접근 시간은 다음과 같이 구성됩니다.
- 탐색시간(Seek time) : 헤드를 해당 트랙(실린더)으로 움직이는데 걸리는 시간
- 회전지연(Rotational latency) : 헤드가 원하는 섹터에 도달하기까지 걸리는 시간
- 전송시간(Transfer time) : 실제 데이터의 전송 시간
디스크 스케줄링은 탐색 시간을 최소화하는 것이 목표입니다. 디스크 스케줄링 기법으로 다음과 같은 것이 있습니다.
- SSTF(Shortest Seek Time First) : 현재 위치에서 가장 적게 걸리는 곳에 먼저 접근해 데이터를 가져오는 기법입니다.
- SCAN : 현재 주로 쓰이는 방식입니다. 헤드가 디스크의 한쪽 끝에서 다른 쪽 끝으로 이동하며 가는 경로에 있는 모든 요청을 처리하는 방법입니다. 다른 한쪽 끝에 도달하면 역방향으로 이동하며 오는 경로에 있는 모든 요청을 처리하며 다시 반대쪽 끝으로 이동합니다. 엘리베이터의 동작 방식과 같습니다.
5. 입출력 관리(I/O Management)
외부장치로부터 입력을 받거나 외부로 출력을 하기 위해서는 반드시 운영체제를 거쳐야 합니다. 운영체제는 프로세스로부터 입출력을 요구받아 명령을 전달하고 입출력이 완료되면 데이터를 전달하고 프로세스를 다시 실행 가능 상태로 전이시키는 기능을 합니다.
6. 파일 관리(File Management)
운영체제는 파일 관리 기능과 디렉토리 구조를 제공하고 사용자 및 시스템의 파일을 관리합니다.
- 파일 및 디렉토리 생성/삭제
- 파일 접근 및 조작
- 파일을 물리적 공간으로 사상(Mapping)
- 백업 등
7. 그 외 기능들
- 보호 시스템 : 외부와 사용자의 이상하거나 위험한 행동으로부터 시스템과 자원을 보호하는 기능을 제공합니다.
- 시스템 콜 인터페이스(System Call Interface) : 응용 프로그램과 운영체제 사이의 인터페이스를 제공합니다. 운영체제가 응용프로그램에 제공하는 서비스입니다. 응용프로그램은 시스템 콜을 호출하여 자원이나 입출력을 요구하는 등의 서비스를 요청할 수 있습니다.
- 네트워킹
- 명령어 해석기(Command Interpreter System) : 사용자가 커널에 명령을 내리기 위한 유틸리티를 제공합니다. 우리가 배워 사용하고 있는 bash가 바로 명령어 해석기입니다. 명령어 해석기에 명령을 입력하면 명령어 해석기는 이를 해석해 커널이 이해할 수 있도록 변환해 전달합니다.
정리
운영체제의 구조
- 단일 구조
- 계층 구조
- 마이크로 커널 구조
운영체제의 기능
- 프로세서(CPU) 관리
- 프로세스 관리
- 메모리 관리
- 디스크 관리
- 입출력 관리
- 파일 관리
- 보호 시스템
- 시스템 콜 인터페이스
- 네트워킹
- 명령어 해석기
마치며
이상으로 운영체제의 구조와 기능에 대해 알아보았습니다. 운영체제는 다양한 기능을 제공하는 것을 알았습니다. 앞서 본 바와 같이 운영체제는 많은 기능을 제공하고 있습니다. 각 기능에는 다양한 기법과 시스템이 있습니다. 다음 포스팅은 인터럽트에 대해 알아보고 운영체제가 어떻게 동작하는지 알아보겠습니다. 다음 글까지가 운영체제 과목의 개요라고 생각해주시면 될 거 같습니다. 긴 글 읽어주셔서 감사합니다. 질문이나, 틀린 부분 댓글 달아주시면 답변드리겠습니다.
Reference
'운영체제' 카테고리의 다른 글
Thread(스레드) (1) | 2021.08.01 |
---|---|
프로세스 (1) | 2021.08.01 |
인터럽트 (2) | 2021.07.26 |
컴퓨터 시스템 구조 (5) | 2021.07.18 |
운영체제란 무엇일까 (7) | 2021.07.16 |