정의 및 특징
운영체제란(Operating System)
- 컴퓨터의 시스템 자원들을 효율적으로 관리함으로써 성능을 높이고, 사용자에게 편의성을 제공하기 위해 사용됨
- 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종
- 운영체제와 유사하나 소프트웨어를 추가로 설치할 수 없는 것을 펌웨어(firmware)라고 함
운영체제의 역할
- 자원 관리
- 프로세스 관리
- 프로세스 스케줄링을 통한 CPU 소유권 할당 및 동기화
- 프로세스 생성과 제거, 시작과 정지, 자원 할당 및 반환
- 메모리/주변장치 관리
- 한정된 메모리를 어떤 프로세스에 얼마나 할당할지
- 디스크 파일을 어떻게 보관할지
- 입출력 장치 스케줄링 및 전반적인 관리
- 파일 관리
- 파일의 생성과 삭제, 변경, 유지 등
- 프로세스 관리
- 자원 보호
- 프로그램이나 다른 사용자가 중요 데이터에 접근하지 못하게 컴퓨터 자원들을 보호
운영체제의 목적
- 처리능력, 사용 가능도, 신뢰도 향상
- 응답 시간 감소
응답시간 (Turn Around Time) | 작업 의뢰 후 시스템에서 결과가 얻어질 때까지의 시간 |
처리능력 (Throughput) | 시스템의 생산성을 나타내는 단위. 일정기간 동안 처리하는 일의 양 |
사용가능도 (Availability) | 시스템을 얼마나 빠르게 사용할 수 있는가의 정도 |
신뢰도 (Reliability) | 주어진 문제를 얼마나 정확하게 처리하는가의 정도 |
운영체제의 구조
전체적인 구조
- 유저 프로그램이 맨 위에 있고 가장 밑에 하드웨어가 위치
- 가운데 인터페이스, 시스템콜, 커널, 드라이버 부분이 운영체제를 지칭함
인터페이스
- 사용자는 커널에 직접 접근할 수 없기 때문에 OS가 제공하는 인터페이스를 사용해야 함
- 대표적으로 GUI(Graphical User Interface)와 CLI(Command Line Interface)가 있음
- 사용자와 애플리케이션은 인터페이스를 통해 커널에 명령을 전달하고, 실행결과를 전달받음
- 참고로 GUI가 없고 CUI만 있는 리눅스 서버도 있음
커널과 쉘
- 커널
- 운영체제의 핵심으로, SW와 HW간의 커뮤니케이션을 관리하는 프로그램
- SW로부터의 요청을 HW가 처리할 수 있도록 요청을 반환하는 역할을 함
- 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 수행
- 알맹이, 핵심이라는 뜻을 가짐
- 쉘
- 사용자와 OS 간에 대화를 가능하게 해주는 명령어 해석기 역할
- 커널과 애플리케이션의 인터페이스 역할
- 껍데기, 주변이라는 뜻을 가짐
시스템 호출(system call)
- 운영체제가 커널에 접근하기 위한 인터페이스로, 커널이 자신을 보호하기 위해서 만든 인터페이스임
- 애플리케이션이 직접 하드웨어 자원에 접근하거나 수정하여 중요 데이터가 소실되는 실수를 방지하기 위해 시스템콜을 사용
- 즉 애플리케이션이 하드웨어에 접근해야 하거나 OS가 제공하는 서비스를 이용하기 위해서는 커널 함수를 호출하는 시스템 콜을 사용해야 함
- 시스템 콜을 제공함으로써 OS는 컴퓨터 자원을 보호하게 됨
드라이버
- 커널과 하드웨어의 인터페이스를 드라이버라고 함
- 보통 커널은 입출력의 기본적인 부분만 제작하여 마우스, 키보드같은 하드웨어는 별다른 설치 없이 작동하게 됨
- 프린터나 스캐너같이 복잡한 하드웨어의 경우 제작사가 만든 SW를 따로 설치해서 사용해야 하며, 이때 이 SW를 디바이스 드라이버라고 함
시스템 콜
동작 방식
- 시스템 콜은 인터럽트 중 하나인 소프트웨어 인터럽트(Trap)의 한 종류임
- 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용함
- 유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행됨
예시
- readFile()이라는 함수가 발동했다고 가정하자
- 유저 모드에서 파일을 바로 읽지 않고 커널 모드로 들어가 읽음
- 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행함
- 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호할 수 있음
전체적인 흐름
- 프로세스나 스레드에서 운영체제로 어떠한 요청을 보낼 때 시스템콜이라는 인터페이스와 커널을 거쳐 운영체제에 전달됨
- 이 시스템콜은 하나의 추상화 계층임
- 따라서 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 크게 신경쓰지 않고 프로그램을 구현할 수 있음
modebit의 역할
- modebit은 1또는 0 값을 가지는 플래그 변수(0은 커널 모드, 1은 유저 모드)
- 시스템콜이 작동될 때 이를 통해 유저 모드와 커널 모드를 구분함
- 카메라, 키보드 등 I/O 디바이스는 운영체제를 통해서만 작동해야 함
- 커널 모드를 거쳐 운영체제를 통해 작동한다고 해도 외부에 의해 악용되는 경우를 100% 막을 수는 없지만, 막기가 더 쉬움
- 유저 프로그램이 카메라를 이용하려고 할 때 시스템 콜을 호출하고 modebit을 1에서 0으로 바꾸며 커널 모드로 변경
- 그 후 카메라 자원을 이용한 로직을 수행
- modebit을 0에서 1로 바꿔 유저 모드로 변경하고 이후 로직을 수행
운영체제의 주요 과정
부트스트래핑(bootstraping)
- 운영체제를 메인 메모리에 적재하는 과정을 부팅, 또는 부트스트래핑이라고 함
- ROM에는 부트로더(부트스트랩 로더)라는 소규모 프로그램이 있으며, 하드디스크와 같은 보조기억장치에 저장된 OS를 메인 메모리에 적재하는 기능을 함
- ROM: 비휘발성으로 메모리에서 극히 일부를 차지(수 KB)
- RAM: 휘발성으로 메모리의 대부분을 차지하며 실제 프로그램이 할당되는 곳(수 MB~GB)
- 컴퓨터의 전원이 켜지면 부트 로더의 과정, 즉 “부팅”이 일어남
- 프로세서(CPU)에서 ROM에 있는 내용을 읽음
ROM 안에는 POST(Power-On Self-Test)와 부트로더가 저장되어 있음 - POST는 전원이 켜지면 가장 처음에 실행되는 프로그램으로 현재 컴퓨터의 상태를 검사함
- POST 작업이 끝나면 부트 로더가 실행됨
- 부트 로더는 하드디스크에 저장되어 있는 OS를 찾아 메인 메모리(RAM)에 가져옴
- 프로세서(CPU)에서 ROM에 있는 내용을 읽음
- OS는 컴퓨터의 전원이 꺼지는 시점에 종료됨
인터럽트(Interrupt)
- 현재 실행 중인 프로그램을 중단하고 다른 프로그램의 실행을 요구하기 위해 발생하는 명령
- 다중 프로그래밍을 위해 없어서는 안될 기능
- 키보드, 마우스 등 IO 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생
- 인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행됨
- 하드웨어의 인터럽트
- Timer, 키보드/마우스 입력, DMA 등
- 시스템 버스를 통해 물리적 신호가 CPU로 전달됨
- 소프트웨어의 인터럽트
- 시스템 콜로써 구현될 수 있음
- 인터럽트 요청 신호에 따라 인터럽트 함수(인터럽트 서비스 루틴)가 실행됨
- 인터럽트 핸들러 함수가 모여있는 인터럽트 벡터를 통해 인터럽트 핸들러 함수가 실행됨
- 인터럽트 발생 시 이전 실행 정보를 스택 영역에 저장하고 있어야 이후 다시 프로그램을 이어서 실행할 수 있음
References
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 페이지 테이블(TLB, 계층/해시/역페이지 테이블) (0) | 2023.03.20 |
---|---|
[운영체제] 메모리 분할(연속/불연속 할당, 단편화) (0) | 2023.03.14 |
[운영체제] 가상 메모리, 스와핑, 페이지 폴트 (0) | 2023.03.13 |
[운영체제] 메모리 계층(캐시히트, 지역성, 캐시 매핑) (0) | 2023.03.13 |
[운영체제] 컴퓨터 하드웨어의 구성 요소(CPU, 메모리, 시스템 버스) (0) | 2023.03.12 |