운영체제 구조
운영체제 서비스
개요
- 운영체제는 사용자(or 프로그램)에게 프로그램의 실행 환경을 제공한다.
- user interfaces
- 사용자 인터페이스
- GUI, batch파일, command line 모두 user interface에 해당된다.
- system calls
- 운영체제의 커널모드로 동작하는 중개자(관리자)역할을 수행한다.
- services
- 프로그램 개발과 실행에 대해 편리한 환경을 제공한다.
운영체제 서비스: 사용자 업무 서비스
개요
- 사용자 업무를 수행하는 데 필요한 기능을 제공하는 운영체제 서비스에 대해 설명하도록 하겠다.
사용자 인터페이스
- 명령어 라인 인터페이스 (CLI: Command Line Interface)
- 배치 인터페이스
- GUI
프로그램 실행
- Program Execute
- 프로그램을 메모리에 적재, 실행, 실행 종료하는 서비스이다.
입출력 연산
- 프로그램 실행에서 요구하는 파일 또는 입출력 장치 등의 입출력 서비스이다.
파일 시스템
- 파일 조작, 관리를 수행하는 서비스이다.
통신
- 동일한 컴퓨터 또는 네트워크로 연결된 컴퓨터에 있는 프로세스 간 정보 교환을 수행한다.
- 통신 기법
- 메시지 전달 기법
- 운영체제(Kernel)이 관여한다.
- 공유 메모리 기법
- 공유 메모리 기법 == 생산자/소비자 모델
- 버퍼 관리를 잘 해주어야 한다.
- 메시지 전달 기법
오류 탐지
- 운영체제는 가능한 모든 오류를 인지하고 있어야 한다.
하지만, 모든 오류를 인지하기란 어렵다.
운영체제 서비스: 시스템 자원 서비스
개요
- 시스템의 자원을 공유하여 시스템의 효율적인 운영을 보장하는 서비스
자원 할당
- 다수의 사용자나 다수의 작업들이 동시에 실행될 때 각각에 자원을 할당해주는 서비스이다.
- 자원의 종류
- CPU cycles
- main memory
- file storage
- I/O devices
회계
- 어떤 사용자가 어떤 자원을 얼마나 사용하는지 기록하고 관리하는 서비스이다.
보호와 보안
- 보호
- 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 서비스이다.
- 즉, 파일에 대한 접근 권한 권리를 뜻한다.
- 보안
- 외부로부터 시스템 보안을 유지하기 위해 사용자 인증, 부적합한 접근 방지 등을 수행하는 서비스이다.
사용자 인터페이스
사용자 인터페이스 종류
- 명령어 라인 인터페이스 (CLI: Command Line Interface)
- 배치 인터페이스
- GUI
Command Line Interface (CLI)
- CLI나 명령어 해석기를 통해 명령어를 직접 입력한다.
- CLI는 커널이나 시스템 프로그램으로 구현된다.
- 선택 가능한 여러 개의 명령어 해석기를 제공한다.
- ex) 리눅스의 본쉘, c쉘 등
- 명령어 해석기
- 역할
- 사용자의 명령어를 가져와 실행한다.
- 명령어 해석기의 종류
- 명령어 해석기가 명령어 코드를 포함하는 경우
- 이때, 명령어의 개수가 명령어 해석기의 크기를 결정한다.
- 명령어 해석기가 명령어 목록만 가지고 있는 경우
- 명령어 해석기의 크기가 작아진다.
- 명령어 해석기가 명령어 코드를 포함하는 경우
- 역할
GUI
- 사용자 친화적인 상징 인터페이스이다.
- 많은 시스템들이 CLI와 GUI 인터페이스를 모두 지원한다.
- Microsoft Windows
- CLI 명령어 셸을 가지고 있는 GUI이다.
- Apple Mac OS
- UNIX 커널과 셸을 가지고 있는 Aqua GUI이다.
- Unix, Linux
- 선택적인 GUI를 가진 CLI이다.
- Microsoft Windows
시스템 콜
시스템 콜이란?
- 시스템 콜은 ‘운영체제가 제공하는 서비스에 대한 인터페이스’를 사용자에게 제공한다.
- 일반적으로 고급 언어 (c , c++)로 작성된 루틴 형태로 제공된다.
- 대부분의 경우, ‘직접적인 시스템 콜 사용’ 대신 ‘API(Application Program Interface)’를 통해 접근한다.
- 사용자 프로그램이 운영체제가 제공하는 서비스에 접근하고자 한다. ⇒ 이때, API를 사용한다. ⇒ API를 통해, 시스템 콜을 요청하여 운영체제 서비스의 기능을 수행하도록 할 수 있다.
이때 API는 시스템 콜을 사용할 수 있도록 하는 API를 뜻한다.
시스템 콜 API의 대표 종류
- Windows
- Win32 API
- UNIX, LINUX, Mac OS
- POSIX API
- Java Virtual Machine
- Java API
POSIX: Portable Operating System Interface (이식 가능 운영체제 인터페이스)
시스템 콜 예시
아래 그림은 cp in.txt out.txt
명령(파일 복사 명령어)에 대한 시스템 콜 API 호출 순서에 대한 예시이다.
시스템 콜 구현
- 각 시스템 콜에 대해, 숫자(index)가 부여된다.
- 시스템 콜 인터페이스가 ‘시스템 콜 테이블’을 관리한다.
- 시스템 콜 인터페이스
- 운영체제 커널 내에 있는 요청된 시스템 콜을 요청한다.
- 시스템 콜의 반환 상태와 해당 반환 값을 반환한다.
시스템 콜 특징
- 개발자는 시스템 콜이 어떻게 구현되는지 알 필요가 없다.
- 개발자는 API를 제대로 사용하고, 운영체제가 시스템 콜의 결과로 무슨 일을 하는지만 알면 된다.
- 운영체제 인터페이스의 구현부는 API에 의해 숨겨진다.
시스템 콜 유형(종류)
- 프로세서 제어
- 파일 관리
- 장치 관리
- 정보 관리
- 통신
- 보호
시스템 콜에 파라미터 전달하기
운영체제에 매개변수를 전달하는 방법의 종류
- 매개변수를 레지스터에 전달하는 방법
- 매개변수를 메모리의 블럭, 테이블에 저장하는 방법
- 프로그램이 매개변수를 스택에 넣는 방법
매개변수를 레지스터에 전달하기
- 가장 단순한 방법이다.
- 하지만, 레지스터 개수보다 더 많은 매개변수가 있는 경우, 한계가 있다.
매개변수를 메모리의 블럭, 테이블에 저장하는 방법
- 블럭의 메모리 주소가 레지스터에 매개변수로 전달된다.
프로그램이 매개변수를 스택에 넣는 방법
- 운영체제가 스택으로부터 매개변수를 꺼낸다.
- 위에서 설명한 블럭 방식과 스택 방식은 매개변수의 개수나 길이에 제약을 받지 않는다.
시스템 프로그램
시스템 프로그램이란?
- 시스템 프로그램은 프로그램 개발과 실행에 편리한 환경을 제공한다.
- 운영체제에 대한 대부분 사용자의 인식은 시스템 콜보다는 시스템 프로그램에 의해 결정된다.
시스템 프로그램의 종류
- 파일 관리
- 상태 정보
- 프로그래밍 언어 지원
- 프로그램 적재와 실행
- 통신
- 백그라운드 서비스
- 부팅시 살아나는 서비스
- 백그라운드 서비스의 종류
- 시스템 시작시 실행됐다가 다시 종료되는 서비스
- 시스템 시작해서 종료시까지 살아있는 서비스
운영체제 설계 및 구현
개요
- 정형화된 해결책은 존재하지 않는다. 하지만 성공적인 접근 방법들이 존재한다.
- 운영체제 별로 내부 구조는 매우 다르다.
- 운영체제 설계 내용은 하드웨어와 시스템 타입에 따라 달라진다.
정책과 기법
- 중요한 원칙
- ‘정책’과 ‘메커니즘’의 분리가 필수이다.
- 정책
- 무엇을 할 것인가?
- 기법
- 어떻게 할 것인가?
- 정책과 기법을 분리해야한다.
- 그래야 나중에 정책이 변경될 때 최대한의 융통성이 생긴다.
- 예시
- 기법: CPU를 계속 점유하는 것을 방지하기 위해 Timer 사용한다.
- 정책: 특정 사용자에게 타이머를 얼마나 오랫동안 설정할 것인지 결정한다.
구현
- 다양성
- 초기: 어셈블리어
- 현재: C, C++ 사용
- 언어 혼합 사용
- 하위 수준: 어셈블리어
- 중요 부분: C
- 시스템 프로그램: C, C++, PERL, Python과 같은 스크립트 언어
운영체제 구조
개요
- 범용 운영체제는 매우 큰 프로그램이다.
- 다양한 방법으로 운영체제의 구성을 할 수 있다.
MS-DOS
- 최소의 공간에 최대의 기능을 제공하도록 작성되어있다.
- 특징
- 모듈로 제대로 분할되지 않았다.
- 인터페이스와 기능 계층이 잘 분리되지 않았다.
BIOS: Basic Input/Output System
UEFI: Unified Extensible Firmware Interface (BIOS 대체제)
UNIX
- UNIX는 아래 두 가지 부분으로 분리되어있다.
- 시스템 프로그램
- 커널 (Kernel)
- 특징
- 단순하지도 않지만 계층 구조도 없는 형태이다. (초기 UNIX)
계층적 접근
- 운영체제는 여러 갱의 계층으로 구분된다.
- 각 계층은 하위 계층 위에 만들어진다.
- 최하위 계층: 하드웨어
- 최상위 계층: 사용자 인터페이스
마이크로 커널 시스템 구조
- 커널이 커져서 관리가 어려워졌다.
- 따라서, ‘가능한 많은 기능’을 커널에서 사용자 공간으로 옮겨 커널을 최소화한다.
- 사용자 모듈 간의 통신은 message passing을 사용한다.
- Mach : 첫 마이크로 커널
- 장점
- 마이크로커널은 확장하기 좋다.
- 새로운 하드웨어에 이식이 쉽다.
- 신뢰성 향상 (커널 모드가 작다.)
- 보안성 향상
- 단점
- 사용자와 커널 간의 통신으로 인한 성능 오버헤드 발생(지연)
모듈
- 대부분의 현대 운영체제 시스템은 적재 가능한 모듈로 구현된다.
- 핵심(core)커널이 다른 모듈의 기능을 필요로 할 때, 해당 모듈과 연결하여 기능을 사용한다.
- LKM: Loadable Kernel Modules
- 모듈은 객체 지향 기법이다.
하이브리드 시스템
개요
- 대부분의 현대 운영체제는 오직 한가지 모델만을 사용하지 않는다.
- Linux, Solaris의 커널은 단일구조이지만, 함수의 동적 적재는 모듈화 기법을 사용한다.
- 윈도우도 대부분이 단일구조이지만, 다른 서브시스템의 특징에 따라 마이크로커널을 채택한다.
Mac OS 구조
운영체제 디버깅
- 운영체제는 오류 정보를 포함하는 log file을 생성한다.
- 애플리케이션이 죽으면 프로세스의 메모리를 캡처한 코어 덤프를 생성한다.
- 운영체제가 죽으면 커널 메모리를 캡처한 “비정상 종료 덤프”를 생성한다.
- 해당 덤프를 통하여, 운영체제가 죽은 원인을 분석한다.
- 성결대학교 컴퓨터 공학과 강영명 교수님 (2021)
- Siberschatz et. al., 『Operating System Concepts 10th Ed.』