1-3.[os] 운영체제의 구조
커널
- 프로세스 관리
- 메모리 관리
- 저장장치 관리
- 자동차의 엔진
- 운영체제의 성능을 좌우
인터페이스
- 자동차의 계기판
- 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려준다
- 같은 커널이라도 다른 인터페이스를 끼울 수 있다
시스템 호출
- 커널이 자신을 보호하기 위해 만든 인터페이스
- 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접근
a. 직접 접근: 두 응용 프로그램이 데이터 저장하려다 충돌남
b. 시스템 호출을 통한 접근: write() 함수로 데이터 저장 요청
시스템 호출:
- 커널이 제공하는 시스템 관련 서비스를 모아놓은 것
- 커널이 제공하는 서비스를 이용하기 위한 인터페이스
- 응용 프로그램과 커널의 인터페이스
- ex) print()
API(Application Programming Interface): 응용 프로그램 인터페이스
- 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스 SDK(System Developer's Kit): 시스템 개발자용 키트
- (API + API 사용 메뉴얼 + 코드 편집기, 에뮬레이터, 개발용 응용 프로그램) 개발툴
- ex) 안드로이드 스튜디오
드라이버
- 커널과 하드웨어의 인터페이스
- 커널이 모든 하드웨어에 맞춰줄 수 없어
- 기본 입출력만 제작하고, 하드웨어 제작자가 특성을 반영해 만듦
- 하드웨어 제작자가 만든 소프트웨어 디바이스
- 마우스, 키보드는 이미 커널에 포함되어있음
- 그래픽카드, 프린터기는 사용자가 직접 설치
- 커널이 제공하는 드라이버도 있고, 하드웨어 제작자가 제공하는 드라이버도 있다
- 프로세스 관리 : 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공한다
- 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다.
- 파일 시스템 관리 : 데이터를 저장하고 접근할 수 있는 인터페이스를 제공한다.
- 입출력 관리 : 필요한 입력과 출력 서비스를 제공한다.
- 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경을 지원한다.
단일형 구조 커널:
Monolithic Architecture
- 초창기 운영체제 구조
- 커널의 핵심 모듈들이 구분없이 하나로 구성되어있다
- ex) MS-DOS, VMS, 초기 유닉스
- main()에 모든 기능을 구현 장점:
- 모듈 간 통신 비용이 줄어 효율적인 운영 가능
단점:
- 모듈이 하나로 묶여있어 오류를 처리하기가 어렵다
- 모듈간 상호의존성이 높아 작은 결함이 시스템 전체로 확산될 수 있다
- 이식성이 낮다: 다양한 환경의 시스템에 맞게 수정해 이식하기 어렵다
- 현대의 운영체제는 복잡해서 단일형으로 구현하기 어렵다
계층형 구조 커널
Layered Architecture
- 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만듦
- 계층끼리 통신함
- 오류 발생 시 해당 계층만 따로 수정
단점:
- 계속 계층과 기능 추가 -> 하드웨어 용량↑
- 커널 소스가 방대해짐 -> 오류잡기 힘듦
마이크로 구조 커널
Micro Architecture
- 가장 기본적인 기능만 제공
- 다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있다
- 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다
- 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용 가능
가상머신
- 운영체제와 응용 프로그램 사이에서 작동하는 프로그램
- 가상머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하 는 것처럼 보임
- 하나의 코드만 만들면 여러 운영체제에서 똑같이 실행 가능