[OS] 운영체제(2장) 운영체제 구조 - 3
7. 운영체제 구조
1. Simple structure (단층 구조)
- monolithic 구조 – 많은 기능들이 하나의 계층으로 구현됨
- 많은 사용 운영체제가 잘 정의된 구조를 갖지 않음
2. Layered structure
- monolithic 구조의 반대 개념
- 운영체제가 여러 계층으로 구분됨
- 각 계층은 하위 계층 위에 구축됨
3. Microkernel
- 필수적이 아닌 구성 요소를 커널에서 모두 제거하고 시스템 및 사용자 수준 프로그램으로 구현함 → smaller kernel
- 독립된 커널이여서 고치기가 쉬움
Simple Structure – MS-DOS
명령줄 인터페이스(Command Line Interface)를 사용하여 사용자와 상호 작용하며, 파일 및 디렉토리를 관리하고, 프로그램을 실행하는 등의 기본적인 기능을 제공
최소 공간에 최대 기능을 제공하도록 작성 → 모듈들로 구분되지 않음 인터페이스와 functionality 계층이 잘 분리되어 있지 않음 → 운영체제를 거치지 않고 BIOS를 사용하여 입출력 가능
기능이 제한적인 8088 CPU 사용 → 악의적이거나 오류가 있는 프로그램에 취약함
Simple Structure – UNIX
초기에 하드웨어 기능에 제한이 있었으며 제한된 구조를 가짐
UNIX의 구성
Kernel과 System program으로 구성 Kernel은 여러 인터페이스와 장치 드라이버로 분리되어 확장됨
UNIX Kernel
the system-call interface 아래와 physical hardware 위의 모든 부분 한 계층에서 많은 기능을 제공
- the file system, CPU scheduling, memory management, and other operating-system functions
monolithic 구조의 장단점
- 장점 – 성능(커널 내부 통신 오버헤드가 거의 없음)
- 단점 – 구현과 유지보수가 어려움
Layered Approach
Layered 구조
- 최하위 계층(layer 0) = 하드웨어
- 최상위 계층(layer N) = 사용자 인터페이스
Modularity
각 계층은 하위계층에서 제공하는 함수와 서비스만 사용함
Layered Approach의 장단점
장점 - 구현과 디버깅이 간단함
- 하위계층의 연산이 어떻게 구현 되었는지 알 필요가 없음
- 하위계층 연산이 무슨 동작을 하는지만 알면됨
- 컴퓨터 네트워크 프로토콜과 웹 응용 구현에 성공적으로 사용된 방법
단점
- 각 계층을 적절히 정의하는 것이 어렵고, 명확하지 않을 수 있음
- 덜 효율적 - 계층별 시스템 호출 오버헤드
- 이러한 제한점으로 최근에 이 방법에 대한 부정적 평가 → 많은 기능을 가진 적은 수의 계층으로 설계
Microkernel
커널의 필수적이 아닌 많은 부분을 사용자 공간으로 이동 → small kernel
Microkernel의 기본 기능
- 사용자 모듈과 사용자 공간에서 수행하는 서비스 간에 통신 기능 제공
- message passing 사용
Microkernel 개발 이유
- UNIX 커널이 확장되면서 관리하기가 어려워짐
- Carnegie Mellon University (CMU)에서 이를 해결하기 위해 microkernel 방식의 Mach 커널 개발
Microkernel의 장단점
장점
- 확장이 용이 - 새로운 서비스는 사용자 공간에 추가
- 운영체제 이식이 용이 - 작은 커널이므로 변경 부분이 적음
- 높은 신뢰성과 보안성
- 커널 모드에서 수행되는 코드가 적다
- 대부분의 서비스는 사용자 프로세스로 실행됨 → 서비스가 잘못되더라도 다른 부분에 영향이 없음
단점
- 시스템 함수 오버헤드로 인한 성능 저하
- 사용자 공간과 커널 공간 간의 통신 오버헤드, 프로세스 전환 오버헤드
Modules
- kernel 구성
- loadable kernel module(LKM)
- 모듈 인터페이스의 특징
- layered 구조와 유사하지만 더 유연성이 있음
- 잘 정의되고 보호된 인터페이스를 가지는 점에서 layered 구조와 유사
- 모듈은 임의의 다른 모듈을 호출할 수 있으므로 유연성이 있다.
- microkernel approach과 유사하지만 더 효율적
- 핵심 모듈은 핵심 기능만 가지고 있는 점에서 microkernel 구조와 유사
- 모듈이 message passing을 사용하지 않으므로 더 효율적
8. 운영체제 디버깅
디버깅
- 오류를 발견하고 수정하는 것
장애 분석
- log file - 프로세스가 실패하면 오류 정보를 기록
- core dump 파일 - 오류 발생 프로세스의 메모리 내용을 저장
- 초창기의 컴퓨터에서 메모리를 core라고 부름
- crash dump file - 커널 장애시에 커널 메모리 내용을 저장
- 커널 장애를 충돌(crash)라고 부름
성능 조정도 디버깅 작업에 포함
- 병목 지점을 제거하여 시스템 성능을 최적화 가능
- OS와 bottleneck을 발견하기 위하여 시스템 성능 측정 및 표시 유틸리티를 사용해야 함 (ex) top (unix), windows task manager(작업관리자)
추적
- dtrace : Solaris, FreeBSD, Mac OS X에서 제공되는 사용자 프로세스와 커널에 동적으로 탐색점을 추가할 수 있는 유틸리티
- strace : 시스템 호출 추적이 가능한 Linux 유틸리티
9. 운영체제 생성
운영체제 구성
- 운영 체제는 다양한 구성을 가진 모든 종류의 시스템에서 실행되도록 설계됨
- 운영 체제는 특정 컴퓨터를 위해 구성 되어야 함
운영체제 생성
- 운영체제 배포 – 디스크, CD-ROM, DVD-ROM, 또는 ISO image 형태
- 하드웨어 구성 정보
- 구성 파일을 읽거나, 직접 하드웨어를 검사하여 얻음
- 운영체제 3가지 생성 방법
- 소스코드 수정 후 완전히 다시 컴파일
- 구성 테이블 생성
- 미리 컴파일된 라이브러리에서 필요한 모듈 선택 후 링크함
- 코드가 재컴파일 되지 않음
- 완전한 테이블 방식
- 모듈 선택이 실행 시에 일어남
10. 시스템 부트
Bootstrapping(booting)
커널을 적재하여 컴퓨터를 시작하는 절차
Bootstrap loader
- 커널을 찾아서 메모리에 적재하고 수행을 시작하는 일을 하는 ROM에 저장된 코드
- 대개 시스템을 진단하는 작업을 수행하고, 시스템 전체를 초기화 한 후에 운영체제를 시작시킴
Firmware
- bootstrap 코드의 변경이 가능하도록 ROM대신 EPROM에 저장함
- 하드웨어와 소프트웨어의 중간 특성을 가져서 Firmware라고 부름
- 실행속도가 RAM에서 실행하는 것보다 느려서 대개 빠른 수행을 위해서 RAM에 복사하여 실행함
운영체제 저장 위치
운영체제는 대개 디스크에 저장하지만, 일부 시스템은 운영체제 전체를 EPROM/flash메모리에 firmware로 저장함
시스템 부트 과정
다단계 부팅 과정
- bootstrap loader : reset location in ROM
- simple boot code : single block at block 0 of a boot disk.(boot block)
- complex boot code (full bootstrap program)
- (예) GRUB (Grand Unified Bootloader)
- operating system kernel
UEFI (Unified Extensible Firmware Interface)
- BIOS를 대체할 목적으로 개발됨
- 파일 시스템을 지원하여 boot sector에 의존없이 OS 커널 부팅 가능
댓글남기기