운영체제(OS)
운영체제는 컴퓨터의 자원들을 효율적으로 관리하며 사용자가 컴퓨터를 편리하고 효율적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다.
운영 체제는 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용프로그램이 유용한 작업을 할 수 있도록 제공해 준다.
운영체제의 구조
커널
프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로, 자동차가 운영체제라고 한다면 엔진이 커널에 해당한다. 세단, 스포츠카, SUV 등 자동차의 종류는 다양한 것처럼 운영체제의 종류는 다양하지만 성능을 결정하는 것은 커널이 좌우한다.
컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행된다. 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 한다.
하지만 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라가면 한정된 메모리 공간이 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고, 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 메모리에 상주하는 운영체제의 부분을 kernel(커널)이라고 한다.
커널의 구성
- 프로세스 관리 : 프로세스에 CPU를 분배하고 작업에 필요한 제반 환경 제공
- 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간 제공
- 파일 시스템 관리 : 데이터 저장하고 접근할 수 있는 인터페이스 제공
- 입출력 관리 : 필요한 입출력 서비스 제공
- 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경 제공
단일형 구조 커널
단일형 구조커널은 초창기의 운영체제 구조로, 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있다.
- 장점 : 모듈이 거의 분리되지 않았기 때문에 모듈 간의 통신 비용이 줄어들어 효율적인 운영 가능
- 단점
- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류 처리하기 어렵다
- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높기 때문에 기능상 작은 결함이 시스템 전체 성능 문제 야기
- 다양한 환경 시스템에 적용이 어렵다. (수정이 불가능하기 때문에)
계층형 구조 커널
계층형 구조커널은 단일형 구조 커널이 발전된 형태로, 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식
비슷한 기능을 모두 모듈화했기 때문에 단일형 구조보다 버그나 오류 쉽게 수정
오류 발생 시 해당 계층만 고치면 되기 때문에 디버깅도 수월
인터페이스
커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할, 자동차의 핸들, 브레이크, 계기판 등이 인터페이스에 비유된다.
운영체제는 두 부분으로 나뉘는데 커널에 명령을 전달하고 실행 결과를 사용자와 응용프로그램에 돌려주는 인터페이스와 운영체제의 핵심기능을 모아놓은 커널이다.
운영체제는 커널과 인터페이스를 분리하여, 같은 커널이어도 다른 인터페이스 형태로 제작 가능하다. 같은 커널이라도 다른 인터페이스가 장착되면 사용자에게 다른 운영체제로 보인다. 예를 들어 유닉스의 사용자 인터페이스는 쉘(shell)이라고 하며, bash 쉘, C 쉘, T 쉘 등 여러 종료의 쉘이 있다. 이처럼 인터페이스에 따라 사용자가 사용하기에 불편함의 정도가 달라서 운영체제를 어렵게 느끼곤 한다.
시스템 콜(system call)
OS는 다양한 서비스들을 수행하기 위해 하드웨어를 직접적으로 관리한다.
이와 반면 응용 프로그램은 OS가 제공하는 인터페이스를 통해서만 자원을 사용할 수 있다.
OS가 제공하는 이러한 인터페이스를 '시스템 콜 (system call)' 이라고 한다.
시스템콜은 커널 영역의 기능을 사용자 모드가 가용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 할 수 있게 해 준다. (즉, 응용프로그램은 시스템 콜을 사용해서 원하는 기능을 수행할 수 있음.)
보통 직접적으로 시스템콜을 사용하기보다는 API(라이브러리 함수)를 통해 사용하게 된다.
시스템콜 종류
- 프로세스 제어 (Process Control)
- 끝내기(exit), 중지 (abort)
- 적재(load), 실행(execute)
- 프로세스 생성(create process) - fork
- 프로세스 속성 획득과 속성 설정
- 시간 대기 (wait time)
- 사건 대기 (wait event)
- 사건을 알림 (signal event)
- 메모리 할당 및 해제
- 파일 조작 (File Manipulation)
- 파일 생성 / 삭제 (create, delete)
- 열기 / 닫기 / 읽기 / 쓰기 (open, close, read, wirte)
- 위치 변경 (reposition)
- 파일 속성 획득 및 설정 (get file attribute, set file attribute)
- 장치 관리 (Device Manipulation)
- 하드웨어의 제어와 상태 정보를 얻음 (ioctl)
- 장치를 요구(request device), 장치를 방출 (relese device)
- 읽기 (read), 쓰기(write), 위치 변경
- 장치 속성 획득 및 설정
- 장치의 논리적 부착 및 분리
- 정보 유지 (Information Maintenance)
- getpid(), alarm(), sleep()
- 시간과 날짜의 설정과 획득 (time)
- 시스템 데이터의 설정과 획득 (date)
- 프로세스 파일, 장치 속성의 획득 및 설정
- 통신 (Communication)
- pipe(), shm_open(), mmap()
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
- 보호 (Protection)
- chmod()
- umask()
- chown()
드라이버
응용 프로그램과 커널의 인터페이스가 시스템 호출이라면 커널과 하드웨어의 인터페이스는 드라이버가 담당한다.
하드웨어의 종류는 다양하고 직접 각 하드웨어에 맞는 인터페이스를 개발하기는 어렵기 때문에 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다.
이때 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부른다.
위 그림에서 보면 시스템 호출은 커널 전체 영역을 감싸고 있는데, 이는 시스템 호출(system call)을 거치지 않고서는 커널에 진입할 수 없다는 의미입니다. 하지만 드라이버는 일부 영역으로 표시되고 있는데, 이는 커널이 제공하는 드라이버(키보드, 마우스..) 도 있고 하드웨어 제작자가 제공하는 드라이버도 있다는 뜻입니다.
CPU 모드
CPU는 사용자 애플리케이션 (User application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공한다.
CPU에 있는 Mode bit로 모드를 구분하여 0은 '커널모드(kernel mode)', 1은 '사용자모드(user mode)'로 나뉘어서 구동된다.
운영체제에서 프로그램이 구동되는 데 있어서 파일을 읽어오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많은 부분이 커널 모드를 사용한다.
사용자 모드(User Mode)
사용자 모드에서 사용자 애플리케이션 코드가 실행된다. 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 접근할 수 없다.
접근을 위해서는 '시스템 콜(system call)'을 사용해야 한다.
커널 모드 (Kernel Mode)
운영체제(OS)가 CPU를 사용하는 모드이다. 시스템 콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행한다. Privileged Instructions는 사용자 모드에서 실행되면 exception이 발생한다.
참고 자료
https://didu-story.tistory.com/311
https://math-coding.tistory.com/80
https://product.kyobobook.co.kr/detail/S000001834833
'백엔드 > 운영체제' 카테고리의 다른 글
[운영체제] 캐시(Cache) (2) | 2023.04.25 |
---|---|
[운영체제] 메모리 계층 구조 (Memory Hierarchy) (0) | 2023.04.25 |
[운영체제] 세마포어(semaphore) 뮤텍스(mutex) 모니터(Monitor) (0) | 2023.04.24 |
[운영체제] 경쟁 조건(Race Condition)과 임계 구역(Critical Section) (0) | 2023.04.22 |
[운영체제] 프로세스와 스레드 (0) | 2023.04.21 |