2020. 11. 25. 14:46ㆍ개인공부/운영체제 공룡책 10판
Chapter 2. 운영체제 구조
- 운영체제 서비스
- 사용자와 운영체제 인터페이스
- 시스템 콜
- 시스템 서비스
- 링커와 로더
- 응용 프로그램이 운영체제마다 다른 이유
- 운영체제 설계 및 구현
- 운영체제 구조
- 운영체제 빌딩과 부팅
- 운영체제 디버깅
- 요약
Chapter 2. 운영체제 구조
운영체제를 살펴보기 위한 3가지 관점
- 운영체제가 제공하는 서비스
- 운영체제가 사용자와 프로그래머에게 제공하는 인터페이스
- 시스템의 구성요소와 그들의 상호 연결
즉 사용자, 프로그래머, 운영체제 설계자의 관점에서 바라본다
2.1 운영체제 서비스 -p62
운영체제는 프로그램 실행 환경을 제공한다. 운영체제는 프로그램과 그 프로그램의 사용자에게 특정 서비스를 제공한다.
사용자 인터페이스(user interface)
일반적으로 그래픽 사용자 인터페이스(GUI)가 사용된다. 모바일로 넘어와서는 터치 스크린 인터페이스를 사용한다.
명령어 라인 인터페이스도 있다.
프로그램 수행(program execution)
프로그램은 정상적이든, 비정상적이든(오류를 표시하면서) 실행을 끝낼 수 있어야 한다.
입출력 연산 (I/O operation)
수행 중인 프로그램은 입출력을 요구할 수 있다. 효율과 보호를 위해, 사용자들은 통상 입출력 장치를 직접 제어할 수 없다.
파일 시스템 조작 ( file system manipulation)
프로그램은 파일을 읽고 쓸 필요가 있다. 프로그램은 파일을 생성,삭제,찾기, 파일의 정보를 열거 할 수 있어야한다.
통신 (communication)
한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있는 여러 상황이 있다. 통신 수행의 두가지가 있다.
1. 동일한 컴퓨터에서 수행되고 있는 프로세스들 사이
2. 네트워크에 의해 함께 묶여 있는 서로 다른 컴퓨터 시스템상에서 수행되는 프로세스들 사이.
통신 구현은 공유 메모리와 메시지 전달 기법을 쓴다. 메시지 전달 같은 경우 정보의 패킷들이 운영체제에 의해 프로세스 사이를 이동한다.
오류 탐지 (error detection)
오류는 CPU, 메모리 하드웨어, 입출력 장치 또는 사용자 프로그램에서 일어날수 있다. 디버깅 설비는 시스템을 효율적으로 사용할 수 있는 사용자와 프로그래머의 능력을 향상시킨다.
자원 할당 ( resource allocation )
다수의 프로세스나 다수의 작업이 동시에 실행될때, 그들 각각에 자원을 할당해 주어야 한다.
기록 작성 (logging)
기록 관리는 회계(사용자에게 청구서를 보낼 수 있도록), 또는 단순히 사용 통계를 내기 위해 사용된다.
보호 ( protection ) 와 보안 ( security )
보호는 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 것을 필요로 한다.
보안은 네트워크 어댑터 등과 같은 외부 입출력 장치들을 부적합한 접근 시도로부터 지키고, 침입의 탐지를 위해 모든 접속을 기록하는 것으로 범위를 넓힌다.
2.2 사용자와 운영체제 인터페이스 - p64
명령어 인터페이스는 사용자가 운영체제가 수행할 명령어를 직접 입력할 수 있도록 한다.
GUI와 터치스크린인터페이스는 사용자가 그래픽 기반 사용자 인터페이스를 통하여 운영체제와 접촉하도록 하는 것이다.
2.2.1 명령 인터프리터 -p64
선택할 수 있는 여러 명령 인터프리터를 제공하는 시스템에서 이 해석기는 셸(shell)이라고 불린다.
명령 인터프리터의 중요한 기능은 사용자가 지정한 명령을 가져와서 그것을 수행하는 것이다. 이 수준에서 제공된 많은 명령은 파일을 조작한다. 즉, 생성, 삭제, 리스트, 프린트, 복사, 수행 등을 한다.
2.2.2 그래픽 기반 사용자 인터페이스 -p66
테스크톱이라고 특징지어지는, 마우스를 기반으로 하는 윈도 메뉴 시스템을 사용한다.
2.2.3 터치스크린 인터페이스 -p66
2.2.4 인터페이스의 선택 -p67
개인의 선호에 달려있다.
시스템관리자와 시스템에 대해 깊게 알고 있는 파워 유저 - 명령어-라인 인터페이스
쉘스크립트는 UNIX와 Linux와 같이 명령어-라인 인터페이스에 기반을 둔 시스템에서는 매우 흔한 형태이다.
2.3 시스템 콜 -p68
시스템 콜은 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다.
2.3.1 예제 -p69
파일 복사의 경우
1. UNIX에선 cp란 명령어로 복사할 파일과 복사되어 나올 파일의 이름을 입력한다.
cp in.txt out.txt
2. 두 개의 파일 이름이 얻어지면, 프러그램은 반드시 입력 파일을 오픈하고 출력파일을 생선한 후 오픈한다.
각각의 이러한 연산은 또 다른 시스템 콜을 필요로 하며, 각 시스템 콜에서 오류가 발생하면 처리되어야 한다.
3. 두개의 파일이 준비되면, 입력 파일로부터 읽어서(하나의 시스템 콜), 출력 파일에 기록 (또 다른 시스템 콜) 하는 루프에 들어가게 된다.
4. 마지막으로 전체 파일이 복사된 후,프로그램은 두 개의 파일을 닫고 (2개의 시스템 콜), 콘솔 또는 윈도에 메시지를 기록하고 (추가의 시스템 콜들), 결국 정상적으로 종료(마지막 시스템 콜)하게 된다.
2.3.2 응용 프로그래밍 인터페이스(API : Application Programming Interface) -p70
API는 각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 포함하여 응용프로그래머가 사용 가능한 함수의 집합을 명시한다. ( ex: Java 가상 머신의 Java API )
프로그래머가 시스템 콜보다 API를 선호하는 이유
1. 프로그램의 호환성
2. 실제 시스템 콜은 종종 좀 더 자세한 명세가 필요하고 프로그램상에서 작업하기가 응용 프로그래머에게 가용한 API보다 더 어렵다.
대부분의 POSIX와 Windows API는 UNIX, Linux 및 Windows 운영체제가 제공하는 고유의 시스템콜과 유사하다.
2.3.3 시스템 콜의 유형 - p73
시스템 콜은 다섯 가지의 중요한 범주로 묶을수 있다.
- 프로세스 제어
- 파일조작
- 장치조작
- 정보 유지 보수
- 통신과 보호
2.3.3.1 프로세스 제어 -p75
1.실행 중인 프로그램은 수행을 정상적으로( end() ) 또는 비정상적으로 ( abort() )멈출 수 있어야 한다.
2. 한 프로그램을 실행하고 있는 프로세스가 다른 프로그램을 적재 ( load() ) 하고 실행 ( execute () ) 하기를 원할 수 있다.
3. 새로 생성한 잡이나 프로세스가 잘못되었거나 더 이상 필요 없다면 종료하기를 원할 수 있다. ( terminate_process() )
4. 프로세스의 속성들을 결정하고 재설정(reset) 할 수 있는 능력이 필요하다.
5. 일정 시간만큼 기다리기를 원할 수 있다.
6. 특정 이벤트가 일어날 때까지 기다릴 수 있다. 그 경우 프로세스들은 그 이벤트가 일어나면 신호를 보내야 한다.
2.3.3.2 파일 관리 -p79
1. 파일을 생성( create() ) 하고 삭제 ( delete () )할 수 있어야 한다.
2. 파일이 생성되면 그것을 열고 ( open() ) 사용해야 한다.
3. 읽고 쓰고 위치변경( 되감기, 파일의 끝으로 건너뛰기) 할 수 있다.
4. 파일을 더 이상 사용하지 않을 경우 ( close() )가 필요하다.
2.3.3.3 장치 관리 -p79
1. 다수의 사용자가 동시에 사용하는 시스템은 독점적인 장치 사용을 보장받기 위해 우선 그 장치를 요청 ( request() ) 하는 것을 요구한다.
2. 그 장치의 사용이 끝나면, 반드시 방출 ( release()) 해야한다.
3. 장치를 요청하고 (그리고 할당받게 되면), 파일과 마찬가지로 그 장치를 읽고, 쓰고, 위치 변경할 수 있다.
2.3.3.4 정보 유지 관리-p80
1. 많은 시스템 콜은 단순히 사용자 프로그램과 운영체제 간의 정보 전달을 위해 존재한다.
2. 시스템 대부분은 현재 시간( time()과 날짜를 되돌려 주는(date()) 시스템 콜을 가지고 있다.
3. 더욱이 운영체제는 현재 운영되고 있는 모든 프로세스에 관한 정보를 가지고 있으며, 이러한 정보에 접근하기 위한 시스템 콜이 있다.
4. 일반적으로, 그 프로세스 정보를 획득하고 설정하기 위한 시스템 콜도 있다. ( get_process_attributes() 및 set_process_attributes)
2.3.3.5 통신-p81
1. 메시지 전달 모델에서는 통신하는 두 포르세스가 정보를 교환하기 위하여 서로 메시지를 주고 받는다. 통신이 이루어지기 전에 연결이 반드시 열려야 한다.
2. 공유 메모리 모델에서 프로세스는 다른 프로세스가 소유한 메모리 영역에 대한 접근을 위해 shared_memory_create()와 shared_memory_attach() 시스템 콜을 사용 한다.
일반적으로 운영체제는 한 프로세스가 다른 프로세스의 메모리에 접근하는 것을 막으려 한다. 공유메모리는 두 개 이상의 프로세스가 이러한 제한을 제거하는 데 동의 할 것을 필요로 한다.
2.3.3.6 보호 -p82
보호는 컴퓨터 시스템이 제공하는 자원에 대한 접근을 제어하기 위한 기법을 지원한다.
1. 보호를 지원하는 시스템콜 set_permission() 과 get_permission()을 포함한다. 파일과 디스크와 같은 자원의 허가 권한을 설정 하는데 이용된다.
2. allow_user()와 deny_user() 시스템 콜은 특정 사용자가 지정된 자원에 대해 접근이 허가 혹은 불허되었는지를 명시한다.
2.4 시스템 서비스 - p82
시스템 서비스는, 시스템 유틸리티(system utility)로도 알려진, 프로그램 개발과 실행을 위해 더 편리한 환경을 제공한다.
파일관리
파일과 디렉터리를 생성, 삭제, 복사, 개명 ( rename ), 인쇄, 열거하고, 그리고 일반적으로 조작한다.
상태정보
어떤 프로그램들은 단순히 시스템에게 날짜, 시간, 사용 가능한 메모리, 디스크 공간의 양, 사용자 수, 혹은 이와 비슷한 상태 정보를 묻는다.
다른 프로그램들은 더 복잡하여 상세한 성능, 로깅 및 디버깅 정보를 제공한다.
파일 변경
디스크나 다른 저장 장치에 저장된 파일의 내용을 생성하고 변경하기 위해 다수의 문장 편집기를 사용할 수 있다.
프로그래밍언어 지원
일반적인 프로그래밍 언어들( ex: C, C++, Java, python등 )에 대한 컴파일러, 어셈블러, 디버거 및 해석기가 종종 운영체제와 함께 사용자에게 제공되거나 별도로 다운로드 받을 수 있다.
프로그램 적재와 수행
일단 프로그램이 어셈블되거나 컴파일 된 후, 그것이 수행되려면 반드시 메모리에 적재되어야 한다.
통신
이들 프로그램은 프로세스, 사용자, 그리고 다른 컴퓨터 시스템들 사이에 가상접속을 이루기 위한 기법을 제공한다.
백그라운드 서비스
항상 실행되는 시스템 프로그램 프로세스는 서비스, 서브시스템, 또는 디먼으로 알려져 있다.
응용 프로그램에는 웹브라우저, 워드플세서, 텍스트 포매터, 스프레드시트, 데이터 베이스 시스템, 컴파일러, 도면 제작, 통계분석 패키지 그리고 게임이 포함된다.
2.5 링커와 로더 -p84
소스 파일은 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일 된다. 이러한 형식을 재배치 가능 오브젝트 파일 이라고 한다.
1. 링커는 이러한 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합한다.
2. 로더는 이진 실행 파일을 메모리에 적재하는 데 사용되며, CPU 코어에서 실행할 수 있는 상태가 된다.
2.6 응용 프로그램이 운영체제마다 다른 이유 -p86
시스템의 낮은 수준에는 다른 어려움이 존재한다.
1. 각 운영체제에는 헤더, 명령어 및 변수의 배치를 강제하는 응용 프로그램 이진 형식이 있다. 이러한 구성요소는 명시된 구조 형태로 실행 파일 내의 특정 위치에 있어야 운영체제가 파일을 열고 응용 프로그램을 적재하여 올바르게 실행할 수 있다.
2. CPU는 다양한 명령어 집합을 가지며 해당 명령어가 포함된 응용 프로그램만 올바르게 실행할 수 있다.
3. 운영체제는 응용 프로그램이 파일 생성과 네트워크 연결 열기와 같은 다양한 활동을 요청할 수 있는 시스템 콜을 제공한다. 이러한 시스템 콜은 사용되는 피연산자, 피연산자 순서, 응용 프로그램이 시스템 콜을 호출하는 방법, 시스템 콜 번호, 의미, 및 반환 결과를 포함하여 여러 측면에서 운영체제 마다 다르다.
2.7 운영체제 설계 및 구현 - p88
2.7.1 설계 목표
시스템을 설계하는 데에 첫 문제점은 시스템의 목표와 명세를 정의 하는 일이다. 시스템 설계는 최상위 수준에서는 하드웨어와 시스템 유형의 선택에 의해 영향을 받을 것이다.
이 최상위 설계 수준을 넘어서면 요구 조건들을 일일이 명시하는 것이 훨씬 어려워 진다
이러한 요구 조건은 근본적으로 사용자 목적과 시스템 목적의 두 가지 기본 그룹으로 나눌 수 있다.
2.7.2 기법과 정책 - p88
한 가지 중요한 원칙은 기법(mechanism)으로부터 정책을 분리하는 것이다
기법 - 어떤 일을 어떻게 할 것인가를 결정하는 것
정책 - 무엇을 할 것인가를 결정하는 것
(ex : 타이머 구조는 CPU 보호를 보장하기 위한 기법이지만, 특정 사용자를 위해 타이머를 얼마나 오랫동안 설정할지를 결정하는 것은 정책적 결정이다. )
2.7.3 구현 implementation -p89
운영체제의 설계가 완료되면 구현되어야 한다. 운영체제를 구현하기 위해 고급 언어나 최소한 시스템 구현 언어를 사용함으로써 생기는 장점은 그 언어가 응용 프로그램을 위해 사용될 때 생기는 장점과 마찬가지이다.
운영체제의 주요 성능 향상은 우수한 어셈블리어 코드보다는 좋은 자료구조와 알고리즘의 결과일 가능성이 크다. 단지 소량의 코드만이 고성능이 중요하다.
2.8 운영체제 구조 -p90
일반적인 접근 방법은 한 개의 일관된 시스템보다는 태스크를 작은 구성요소로 분할하는 것.
2.8.1 모놀리식 구조- p91
운영체제를 구성하는 가장 간단한 구조는 구조가 아예 없는 것이다. 즉, 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 넣는 것이다. 모놀리식 구조라고 하는 이 방법은 운영체제를 설계하는 일반적인 기술이다.
모놀리식 커널의 명백한 단순성에도 불구하고 이 구조는 구현 및 확장하기 어렵다. 그러나 모놀리식 커널은 성능 면에서 뚜렷한 이점이 있다. 시스템 콜 인터페이스에는 오버헤드가 거의 없고 커널 안에서의 통신 속도가 빠르다. 그 이유로 속도와 효율성의 장점으로 UNIX, Linux 및 Windows 운영체제에서 발견할수 있다.
2.8.2 계층적 접근 -p92
시스템은 다양한 방식으로 모듈화 될 수 있다. 한 가지 방식이 계층적 접근 방식인데 이 방식에서는 운영체제가 여러 개의 층으로 나누어진다. 최하위 층은(층 0) 하드웨어이고 최상위 층(층 N)은 사용자 인터페이스 이다.
계층적 접근 방식의 주된 장점은 구현과 디버깅의 간담함에 있다. 층들은 자신의 하위층들의 서비스와 기능들만을 사용하도록 선택된다.
각 층은 자신보다 하위 수준의 층에 의해 제공된 연산들만 사용해 구현한다
2.8.3 마이크로 커널 -p94
이 방법은 모든 중요치 않은 구성요소를 커널로부터 제거하고, 그들을 별도의 주소 공간에 존재하는 사용자 수준 프로그램으로 구현하여 운영체제를 구성하는 방법이다. 결과는 더 작은 커널이다.
2.8.4 모듈 Module - p95
운영체제를 설계하는 데 이용되는 최근 기술 중 최선책은 아마도 적재가능 커널 모듈기법의 사용일 것이다.
이 접근법에서는 커널은 핵심적인 구성요소의 집합을 가지고 있고 부팅 때 또는 실행 중에 부가적인 서비스들을 모듈을 통하여 링크할 수 있다.
설계의 주안점은 커널은 핵심 서비스를 제공하고 다른 서비스들은 커널이 실행되는 동안 동적으로 구현하는 것이다.
2.8.5 하이브리드 시스템 Hybrid System -p96
사실 엄격하게 정의된 하나의 구조를 채택한 운영체제는 거의 존재하지 않는다. 대신 다양한 구조를 결합하여 성능, 보안 및 편리성 문제를 해결하려는 혼용 구조로 구성된다.
예를 들어, Linux는 운영체제 전부가 하나의 주소 공간에 존재하여 효율적인 성능을 제공하기 때문에 모놀리식 구조이다. 그러나 이 운영체제들은 모듈을 사용하기 때문에 새로운 기능을 동적으로 커널에 추가 할 수 있다.
2.8.5.1 macOS와 iOSs -p96
1. 사용자 경험층
이 층은 사용자가 컴퓨팅 장치와 상호 작용할 수 있는 소프트웨어 인터페이스를 정의한다.
2. 응용 프로그램 프레임워크 층
이 층에는 Cocoa 및 Cocoa Touch 프레임 워크가 포함되며 Objective-C 밑 Swift 프로그래밍 언어에 대한 API를 제공한다.
3. 핵심 프레임워크
이 층은 Quicktime 및 OpenGL을 포함한 그래픽 및 미디어를 지원하는 프레임워크를 정의한다.
4. 커널 환경 Darwin 이라고도 불리는 이 환경에는 Mach 마이크로커널과 BSD UNIX커널이 포함된다.
2.8.5.2 Android - p99
Android는 그래픽, 오디오 및 하드웨어 기능을 지원하는 다양한 프레임워크를 제공하는 계층화된 소프트웨어 스택이라는 점에서 iOS와 유사하다.
Google은 Java 개발을 위해 별도의 Android API를 설계하였다.
2.9 운영체제 빌딩과 부팅 -p100
일반적으로 운영체제는 다양한 주변장치 구성을 가진 모든 종류의 컴퓨터에서 실행되도록 설계된다.
2.9.1 운영체제 생성 -p102
운영체제를 처음부터 생성(또는 빌딩)하는 경우 다음 절차를 밟아야 한다.
- 운영체제 소스 코드를 작성한다(또는 이전에 작성된 소스 코드를 확보한다)
- 운영체제가 실행될 시스템의 운영체제를 구성한다
- 운영체제를 컴파일 한다
- 운영체제를 설치한다
- 컴퓨터와 새 운영체제를 부팅한다
2.9.2 시스템 부트 -p103
커널을 적재하여 컴퓨터를 시작하는 과정을 시스템 부팅이라고 한다.
- 부트스트랩 프로그램 또는 부트 로더라고 불리는 작은 코드가 커널의 위치를 찾는다
- 커널이 메모리에 적재되고 시작된다.
- 커널은 하드웨어를 초기화 한다.
- 루트 파일 시스템이 마운트 된다.
컴퓨터 전원을 처음 켜면 BIOS라고 하는 비휘발성 펌웨어에 있는 소형 부트 로더가 실행된다.
많은 최신 컴퓨터 시스템이 BIOS 기반 부팅 과정을 UEFI로 대체 하였다. UEFI는 64비트 시스템과 용량이 큰 디스크를 더 잘 지원하는 것을 포함하여 BIOS에 비해 몇 가지 장점이 있다. 가장 큰 장점은 UEFI가 하나의 완전한 부팅관리자 이므로 다단계 BIOS 부팅 과정보다 빠르다는 것이다.
2.10 운영체제 디버깅 -p105
넓게는 디버깅은 하드웨어와 소프트웨어에서의 시스템의 오류를 발견하고 수정하는 행위이다.
성능 문제는 버그로 간주되므로 시스템에서 처리 중에 발생하는 병목 현상을 제거하여 성능을 향상시키려는 성능 조정도 디버깅에 포함된다.
2.10.1 장애분석 -p106
만일 프로세스가 실패한다면, 운영체제는 오류 정보를 로그 파일에 기록한다.
또한 프로세스가 사용하던 메모리를 캡처한 코어 덤프(core dump)를 취하고 차후 분석을 위해 파일로 저장한다.
커널 장애는 크래시( crash ) 라고 불린다. 프로세스 장애와 마찬가지로 오류 정보가 로그 파일에 저장되고 메모리의 상태가 크래시 덤프
( crash dump)에 저장된다.
2.10.2 성능 관찰 및 조정 -p106
성능 조정은 처리 병목 지점을 제거함으로써 성능을 향상시키려고 한다. 병목지점을 발견하기 위하여 시스템 성능을 감시할 수 있다.
2.10.2.1 카운터 Counters
OS는 일련의 카운터를 통해 호출된 시스템 콜 횟수 또는 네트워크 장치 또는 디스크에 수행된 작업 수와 같은 시스템 활동을 추적한다.
2.10.3 추적 -p108
추적 도구는 시스템 콜과 관련된 단계와 같은 특정 이벤트에 대한 데이터를 수집한다.
2.10.4 BCC -p108
BCC(BPF Compiler Collection) 는 Linux 시스템을 위한 추적 기능을 제공하는 풍부한 툴킷이다. BCC는 eBPF ( extended Berkeley Packet Filter) 도구에 대한 프런트-엔드 인터페이스이다.
2.11 요약 - p110
1.운영체제는 사용자 및 프로그램에 서비스를 제공하여 프로그램 실행 환경을 제공한다.
2.운영체제와 상호 작용하기 위한 세 가지 주요 접근 방식: (1) 명령 인터프리터 (2) 그래픽 사용자 인터페이스 (3) 터치스크린 인터페이스
3. 시스템 콜은 운영체제에서 제공하는 서비스에 대한 인터페이스를 제공한다. 프로그래머는 시스템 콜 서비스에 액세스 하기 위해 시스템 콜의 API (application programming interface)를 사용한다.
4. 시스템 콜은 (1) 프로세스 제어, (2) 파일관리 (3) 장치 관리 (4) 정보 유지 관리 (5) 통신 및 (6) 보호 라는 6가지 주요 범주로 나눌수 있다.
5. 표준 C 라이브러리는 UNIX 밑 Linux 시스템을 위한 시스템 콜 인터페이스를 제공한다.
6. 운영체제에는 사용자에게 유틸리티를 제공하는 시스템 프로그램 모음도 포함되어 있다.
7. 링커는 재배치 가능한 여러 오브젝트 모듈을 하나의 이진 실행 파일로 결합한다. 로더는 실행 파일을 메모리에 적재하여 사용 가능한 CPU에서 실행할 수 있게 된다.
8. 응용 프로그램이 운영체제에 따라 달라지는 몇 가지 이유가 있다. 여기에는 프로그램 실행 파일에 대한 서로 다른 이진 형식, CPU에 따라 다른 명령 집합 및 운영체제 마다 다른 시스템 콜이 포함된다.
9. 운영체제는 특정 목표를 염두에 두고 설계되었다. 이러한 목표는 궁극적으로 운영체제 정책을 결정한다. 운영체제는 특정 기법을 통해 이러한 정책을 구현한다.
10. 모놀리식 운영체제는 구조가 없다. 모든 기능은 하나의 주소 공간에서 실행되는 단일 정적 바이너리 파일로 제공된다. 이러한 시스템을 수정하기는 어렵지만 주요 이점은 효율성이다.
11. 계층화된 운영체제는 여러 개의 개별 층으로 나뉜다. 여기서 하위칭은 하드웨어 인터페이스이고 최상위층은 사용자 인터페이스이다.
계층화된 소프트웨어 시스템이 어느 정도 성공을 거두었지만 이 방법은 일반적으로 성능 문제로 인해 운영체제를 설계하는 데 적합하지 않다.
12. 운영체제 설계를 위한 마이크로커널 접근 방식은 최소한의 커널을 사용한다. 대부분의 서비스는 사용자 수준 응용 프로그램으로 실행된다. 메시지 전달을 통해 통신이 이루어진다.
13. 운영체제 설계를 위한 모듈식 접근 방식은 실생 시간 중에 적재 및 제거할 수 있는 모듈을 통해 운영체제 서비스를 제공한다. 현대의 많은 운영체제는 모놀리식 커널과 모듈의 조합을 사용하여 하이브리드 시스템으로 구성된다.
14. 부트 로더는 운영체제를 메모리에 적재하고 초기화를 수해앟며 시스템 실행을 시작한다.
15. 카운터 또는 추적을 사용하여 운영체제의 성능을 관찰할 수 있다. 카운터는 시스템 전체 또는 프로세스별 통계의 모음인 반면에 추적은 운영체제를 통한 프로그램의 실행을 추적한다.
연습문제
2.1 시스템 콜의 목적은 무엇인가?
2.2 명령 인터프리터의 목적은 무엇인가? 통상 커널에 포함되지 않는 이유는 무엇인가?
2.3 UNIX 시스템에서 새 프로세스를 시작하기 위해 명령 인터프리터나 셸에서 어떤 시스템 콜이 실행되어야 하는가?
2.4 시스템 프로그램의 목적은 무엇인가?
2.5 시스템 설계 시 계층화된 접근 방식의 주요 장점은 무엇인가? 계층화된 접근 방식의 단점은 무엇인가?
2.6 운영체제에서 제공하는 5가지 서비스를 나열하고 각 서비스가 사용자에게 편의를 제공하는 방법을 설명하라. 사용자 수준 프로그램이 이러한 서비스를 제공할 수 없는 겨우는 언제인가? 여러분의 답을 설명하라
2.7 일부 시스템은 운영체제를 펌웨어에 저장하고 다른 시스템은 디스크에 저장하는 이유는 무엇인가?
2.8 부팅할 운영체제를 선택할 수 있도록 시스템을 설계하는 방법은 무엇인가? 부트스트랩 프로그램이 해야 할 일은 무엇인가?
'개인공부 > 운영체제 공룡책 10판' 카테고리의 다른 글
운영체제 공룡책 - Chapter 5. CPU 스케줄링 (0) | 2020.12.10 |
---|---|
운영체제 - chapter 4. 스레드와 병행성 (0) | 2020.12.01 |
운영체제 - Chapter 3. 프로세스 (0) | 2020.11.25 |
운영체제 - Chapter1. 서론 (0) | 2020.11.24 |
운영체제 공룡책 10판 - 목차정리 (0) | 2020.11.23 |