티스토리 뷰
본 내용은 학교 강의를 통해 개인적으로 공부한 내용입니다. 책은 쉽게 배우는 운영체제(한빛아카데미)를 참고했습니다. 조언은 언제든지 감사합니다 !
About to Kernel
커널은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적은 기능을 모아놓은 것이다.
위의 그림에서 보이듯이 운영체제는 크게 인터페이스 + 커널의 구조이다. 운영체제의 핵심적인 기능들이 커널에 모여있다면, 인터페이스(GUI)는 이러한 커널을 사용자가 보다 편리하게 사용할 수 있게 해준다.
단 사용자가 사용하는 인터페이스는 다시 시스템 호출이라는 인터페이스를 통해 커널에 접근해야 한다. 다시말해 사용자가 커널에 접근할 수 있는 유일한 수단이 시스템 호출이다.
시스템 호출은 커널이 자신을 보호하기 위한 수단으로 사용자나 응용 프로그램으로 부터 컴퓨터의 자원을 보호하기 위해 직접 접근을 차단하는 인터페이스다.
시스템 호출은 시스템 함수들에 의해 이루어지는데, C언어에서 사용했던 printf(), write() 같은 함수들이다.
※API(Application Programming Interface)는 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스다. 광범위하게 보면 운영체제의 API가 시스템 호출이 될 수 있다.
드라이버는 시스템 호출의 반대편에서 하드웨어 인터페이스를 담당한다. 간단한 디바이스 드라이버들은 커널에 포함되어 있지만 일부 복잡하거나 새로 출시된 디바이스 드라이버들은 제조사에서 직접 제작해 사용자가 설치해야 한다.
이러한 이유로는 커널에 많은 하드웨어들의 프로그램들을 일일히 다 설치하면 커널 프로그램이 커지게 되어 속도 저하나 사용하지 않는 드라이버들에 의한 비효율 등이 발생하므로 해당 하드웨어의 특성을 잘 알고있는 제조사에서 제작하고 배포하는 식이 효율적이다.
What the Kernel does
프로세스 관리 ⇒ 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공
메모리 관리 ⇒ 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공
파일 시스템 관리 ⇒ 데이터를 저장하고 접근할 수 있는 인터페이스를 제공
입출력 관리 ⇒ 필요한 입력과 출력 서비스를 제공
프로세스 간 통신 관리 ⇒ 공동 작업을 위한 각 프로세스 간 통신 환경을 지원
Kernel Type
단일형(monolithic) 커널
초창기의 구조로 커널의 핵심 기능을 구현하는 모듈들의 구분 없이 하나로 구성되어 있다.
초기에는 커널이 처리하는 기능들이 많지 않았고 구현하는 데에 목적이 있었기 때문에 main() 함수 하나에 모든 코딩을 넣은 식의 구조를 가지고 있다.
■ 장점
모듈들이 거의 분리되어 있지 않기 때문에 모듈 간의 통신 비용이 줄어들어 성능이 좋다.
■ 단점
버그나 오류발생시에 여러 기능들이 상호 의존성이 높기 떄문에 작은 결함에도 시스템 전체가 위험해지고 처리 또한 매우 까다롭다.
유지보수가 어렵다
운영체제가 커지고 복잡해 질 수록 구현하기가 매우 어렵다.
계층형(layered) 커널
비슷한 기능을 가진 모듈들을 묶어 계층을 만들고, 계층 간의 통신을 통해 운영체제를 구현하는 방식이다.
■ 장점
단일형 구조보다 버그나 오류를 쉽게 처리할 수 있다.
보다 디버깅이 쉽다.
■ 단점
상하관계가 생기기 때문에 하나의 계층에 이상이 생기면 위, 아래 계층도 동작하지 못할 수 있다.
역시 운영체제가 커지고 복잡해지면 많은 계층들이 발생하게 되어 커널의 크기도 커지고 하드웨어의 용량도 늘어난다.
마이크로(micro) 커널
■ 장점
커널의 크기가 작으므로 커널과 일부 서비스만으로 작은 운영체제를 구성하여 임베디드 시스템에 사용할 수 있다.
하나의 커널로 다수의 운영체제를 동시에 수행시킬 수 있다.
이식성이 좋다.
모듈 크기가 굉장히 작아졌기 때문에 안정성이 높아졌다.
각 모듈이 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다.
■ 단점
잦은 통신이 필요하기 때문에 성능 저하의 우려가 있다.
'CS > OS' 카테고리의 다른 글
CPU 스케줄링 (1) | 2019.03.30 |
---|---|
스레드 (0) | 2019.03.26 |
프로세스 메모리 구조, 시스템 호출 (0) | 2019.03.24 |
프로세스 (0) | 2019.03.22 |
운영체제의 정의와 역할 (0) | 2019.03.10 |
- Total
- Today
- Yesterday
- git
- 생활코딩 javascript
- Spring Data JPA
- 스프링
- 파이썬 for Beginner 연습문제
- git branch
- 쉽게 배우는 운영체제
- 패킷 스위칭
- Spring
- Python Cookbook
- JPA
- 파이썬 for Beginner 솔루션
- 운영체제 반효경
- 프로그래머스
- 선형 회귀
- Gradle
- 스프링 테스트
- Spring Boot
- Computer_Networking_A_Top-Down_Approach
- jsp
- spring mvc
- 방명록 프로젝트
- git merge
- 스프링 컨테이너
- Do it! 정직하게 코딩하며 배우는 딥러닝 입문
- 스프링 mvc
- 지옥에서 온 git
- 쉘 코드
- 김영환
- Thymeleaf
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |