커널 : 프로세스 관리, 메모리 관리, 저장장치 관리 운영체제의 핵심적인 기능을 모아놓은 것

스마트폰의 운영체제에도 커널이 있다. 안드로이드, 애플 모두 유닉스 운영체제의 커널을 이용하여 만듬

구글의 안드로이드는 커널이 공개, 애플의 iOS는 커널 공개X 자사 제품에만 탑재

운영체제에 인터페이스가  존재, 커널에 사용자의 명령을 전달, 실행 결과를 사용자에게 알려주는 역할

운영체제는 크게 두 부분

사용자와 응용 프로그램에 인접하여 커널에 명령을 전달, 실행 결과를 사용자와 응용 프로그램에 돌려주는 인터페이스,

운영체제의 핵심 기능을 모아놓은 커널

커널과 인터페이스 분리

같은 커널을 사용하더라도 다른 인터페이스를 가진 형태로 제작

같은 커널이라도 다르 인터페이스가 장착되면 사용자에게는 다른 운영체제처럼 보인다.

유닉스의 사용자 인터페이스 : 셸 (C셸, T셸, 배시셸)

셸은 명령어 기반 - 일반인이 사용하기 불편

하지만 편리한 인터페이스와 화려한 그래픽을 자랑하는 매킨토시의 운영체제 Mac OS X도 유닉스 계열의 커널을 이용

(명령어 기반의 인터페이스가 어려운 것)

 

시스템 호출

커널이 자신을 보호하기 위해 만든 인터페이스

커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근을 차단,

따라서 시스템 호출이라는 인터페이스를 이용하여 접근

 

사람의 관점

직접 접근 : 사용자가 직접 컴퓨터 자원에 접근하여 작업하는 방식, 사용자가 모든 것을 처리 -> 자원을 보호하기 어렵

시스템 호출을 통한 접근 : 요청하여 작업의 결과만 받는 방식

 

응용 프로그램의 입장

직접 접근 : 두 응용 프로그램이 자기 마음에 드는 위치에 데이터를 저장, 다른 사람의 데이터를 지울 수 있고 다른 사람에 의해 지워질 수도 있음

시스템 호출을 통한 접근 : 직접 하드디스크에 데이터 저장X 커널이 제공하는 write() 함수를 사용하여 데이터를 저장해달라고 요청(어느 위치에 저장 알 수 X), 읽고 싶다면 read()함수로 시스템 호출을 이용하여 가져옴.

호출을 이용하면 커널이 데이터를 가져오거나 저장하는 것을 전적으로 책임 -> 컴퓨터 자원을 관리하기가 수월

 

시스템 호출은 커널이 제공하는 시스템 관련 서비스를 모아놓은 것, 함수 형태로 제공

응용 프로그램이 하드웨어 자원에 접근하거나 운영체제가 제공하는 서비스를 이용하려 할 때는 시스템 호출을 사용

 

시스템 호출과 유사한 용어로 API(응용 프로그램 인터페이스), SDK(System Developer's Kit)가 있음

API는 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스

포토샵은 매우 강력한 그래픽 프로그램 하지만 얼굴 보정 필터와 같은 수백 가지의 필터를 모두 제공X -> 필터를 개발하려는 사람들을 위해 다양한 프로그래밍 인터페이스를 제공하는 인터페이스가 API

API는 시스템 호출보다 광범위한 개념, 운영체제의 API를 시스템 호출이라고 정의할 수 있다.

SDK는 프로그램 개발자를 위해 API 및 API 사용 매뉴얼뿐만 아니라 프로그램 개발에 필요한 코드 편집기와 에뮬레이터 같은 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴(개발자를 위한 종합 선물 세트) 예 : Android Studio

운영체제는 커널이 제공하는 서비스를 시스템 호출로 제한, 다른 방법으로 커널 들어오지 못하게 막음, 컴퓨터 자원을 보호

시스템 호출은 커널이 제공하는 서비스를 이용하기 위낳 인터페이스, 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단

 

드라이버

커널과 하드웨어의 인터페이스 담당

커널이 모든 하드웨어에 맞는 인터페이스 개발 어렵, 각 하드웨어의 특성은 하드웨어 제작자가 가장 잘 알고 있기 때문에 하드웨어 제작자가 관련 소프트웨어를 만드는 것

커널은 입출력의 기본적인 부분만 제작, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행, 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버 (사용자가 직접 설치)

커널이 제공하는 드라이더보 있고 하드웨어 제작자가 제공하는 드라이버도 있다, 하드웨어는 커널과 직접 연결되기도 하고 하드웨어 제작자가 제공하는 드라이버를 통해 연결되기도 한다.

 

커널의 구성

운영체제의 핵심 기능을 모아놓은 커널이 주로 하는 일은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스 간 통신 관리

 

프로세스 관리 : 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공

메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공

파일 시스템 관리 : 데이터를 저장, 접근할 수 있는 인터페이스 제공

입출력 관리 : 필요한 입력과 출력 서비스를 제공

프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경 지원

 

단일형 구조 커널

초창기의 운영체제 구조, 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성

대표적인 운영체제 : MS-DOS, VMS, 초기의 유닉스 운영체제

초기에 운영체제를 만들 때 기능을 구현하기 바빴기 떄문, 모듈을 분리, 구현할 여력X

main()에 모든 기능을 구현한 형태

 

장점

- 모듈을 거의 분리X -> 통신비용 줄어들어 효율적

 

단점

- 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기 어렵

- 운영체제의 여러 기능이 서로 연결되어 있어 상호 의존성이 높아 기능상의 작은 결함이 시스템 전체로 확산

- 다양한 환경의 시스템에 적용하기 어렵, 여러 종류의 컴퓨터에 이식하려면 수정이 필요 단일형 구조에서는 수정이 어렵기 때문에 이식성이 낮다.

- 현대의 운영체제는 매우 크고 복잡하기 때문에 완전 단일형 구조의 운영체제를 구현하기가 어렵

 

계층형 구조 커널

단일형 구조 커널이 발전된 형태, 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식

비슷한 기능을 모아 모듈화했기 때문에 단일형 구조보다 버그나 오류를 쉽게 처리가능

오류가 발생했을 때 해당 계층만 따로 수정하면 되기 떄문에 디버깅하기 쉽다. 오늘 날의 운영체제는 대부분 이 구조

 

마이크로 구조 커널

다양한 하드웨어와 사용자의 요구를 수용하기 위해 계속 계층과 기능을 추가

커널의 크기가 계속 커지고 필요한 하드웨어의 용량이 늘어났으며, 커널 소스가 방대해짐에 따라 오류 잡기 어려워짐

계층형 구조의 접근 방식과 반대로 개발된 커널이 마이크로 구조 커널

프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공

다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현

커널은 메모리 관리와 프로세스 간의 동기화 서비스를 제공, 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결

각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신을 이용하여 이루어짐

각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 X

많은 컴퓨터에 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용 가능

대표적인 운영체제 마하 - 애플의 PC 운영체제인 OS X와 모바일 운영체제인 iOS의 커널로 사용되어 유명

 

가상 머신

C 언어는 어셈블리어 같은 저급 언어의 기능을 가지고 있어 시스템 프로그래밍 언어로 적합, 대표적인 운영체제 유닉스

윈도우처럼 유닉스와 다른 커널을 가진 운영체제와의 호환성 떨어짐. 한쪽에서 만든 소스코드가 다른 운영체제에서 작동X

호환성 문제를 해결한 언어가 바로 자바, 자바로 프로그래밍 하면 대부분의 운영체제에서 작동하기 때문에 코드를 수정할 필요X, 원리는 운영체제 위에 가상머신을 만들고 그 위에서 응용 프로그램이 작동하게 하는 것.

응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보인다. 자바는 유닉스와 윈도우에서 작동하는 다양한 가상머신을 만들어 배포하는데 이를 자바 가상머신, 가상머신을 사용하면 호환성이 높아지지만 응용 프로그램이 가상머신을 통해서만 작동하기 떄문에 느려진다는 단점도 있다.

'운영체제' 카테고리의 다른 글

CPU와 메모리  (0) 2022.02.09
하드웨어의 구성  (0) 2022.02.03
운영체제의 종류와 역사  (0) 2022.01.29
운영체제의 역사  (0) 2022.01.19
운영체제  (0) 2022.01.16

+ Recent posts