
공룡책(10판) Chapter 2 요약
좀 더 깊은 맛보기..! 여기 내용은 특히나 깊이 팔 수 있는 부분이 있는 모양이다. 후 챕터에서 자세하게 다룰 내용들이 제법 보인다. 여기서는, 시스템 콜 개념 정도는 알고 넘어가는게 좋을 듯.
운영체제 서비스 _ Operating-System Services
운영체제는 프로그램 실행 환경을 제공한다.
- 사용자 인터페이스 (User Interface, UI) : CLI, GUI, 터치스크린 등
- 프로그램 수행 (Program Execution) : 프로그램을 메모리에 적재하여 실행, 종료
- 입출력 연산 (I/O operation) : 입출력 수행 수단 제공
- 파일 시스템 조작 (File System Manipulation) : 파일 읽기/쓰기, 생성, 삭제 등
- 통신 (Communication) : 프로세스 정보 교환
- 오류 탐지 (Error Detection) : 모든 가능한 오류에 대한 조처를 수행
- 자원 할당 (Resource Allocation) : 특히 프로세스 - 스레드의 멀티태스킹에서 동기화(synchronization) 문제 발생시 deadlock 가능성, 메모리 관리가 필요
- 기록 작성 (Logging) : 컴퓨터 자원 사용의 추적, 회계, 사용 통계에 활용
- 보호(Protection), 보안(Security) : 자원과 정보의 사용을 통제
사용자와 운영체제 인터페이스 _ User and Operation-System Interface
사용자가 운영체제에 접촉하는 방식이다.
- 명령 인터프리터 Command-Interpreter
- 명령어 라인 인터페이스 (Command Line Interface, CLI)
- 프로세스가 시작되거나 사용자가 로그온할 떄 수행되는 특수한 프로그램으로 취급되며, Shell이라 불린다.
- 사용자가 명령을 가져와서 수행
- 그래픽 기반 인터페이스 Graphical User Interface
- 마우스 기반으로 화면상의 이미지(아이콘) 이용
- 터치스크린 인터페이스 Touch-Screen Interface
- 터치 및 제스처
시스템 콜 _ System Calls
운영체제에 의해 사용할 수 있는 서비스를 접근할 수 있게 인터페이스를 제공한다. 하드웨어에 직접 접근해야 하는 작업 등의 저수준 작업의 경우 어셈블리 명령어(기계어) 가 아니라 C 혹은 C++ 언어로 작성된 함수로 제공한다.
- 어플리케이션 프로그래밍 인터페이스 Application Programming Interface, API
대부분의 어플리케이션 개발자는 API에 따라 프로그램을 설계한다. API는 각 함수에 전달할 매개변수들과 프로그래머가 기대한 반환값을 포함하여 사용 사능한 함수의 집합을 명시한다. 프로그래머는 대부분 시스템의 호환성 문제로 직접 시스템 콜을 호출하기보다는 API 사용을 선호한다.
운영체제는 일일이 시스템 콜을 하기 복잡하고 어렵기에 대부분은 라이브러리를 제공한다.
- ex)
fork()
wait()
shm_open()
사용자 프로그램이 매개변수를 전달하기 위해서 다음 세 가지 방법을 사용한다.
- 매개변수가 CPU 레지스터에 전달 (Call by Value)
- 매개변수를 메모리 내의 블록이나 테이블에 저장되고 블록의 주소가 CPU 레지스터에 전달 (Call by Reference)
- 프로그램에 의해 Stack에 넣어지고 (Push) 운영체제에 의해 꺼내진다 (Pop off)
매개변수의 개수나 길이는 제한이 없어 큰 경우가 많아 2, 3 방법이 선호된다.
- 시스템 콜의 유형
- 프로세스 제어
- 파일 조작
- 장치 조작
- 정보 유지 보수
- 통신
- 보호
시스템 서비스 _ System Services
시스템 서비스는 시스템 유틸리티(System Utility) 라는 프로그램 개발과 실행을 위해 편리한 환경을 제공한다. 이들은 단순히 시스템 콜에 대한 사용자 인터페이스일 수 있고 복잡할 수 있다.
- 파일 관리
- 상태 정보
- 파일 변경
- 프로그래밍 언어 지원
- 프로그램 적재와 수행
- 통신
- 백그라운드 서비스
링커와 로더 _ Linkers and Loaders
- 소스 파일은 물리 메모리 위치에 적재되도록 오브젝트 파일로 컴파일 -> 재배치 가능 오브젝트 파일
Linker
는 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합Loader
는 이진 실행 파일을 메모리에 적재하는데 사용되며 프로그램에 주소를 할당하여 코드가 라이브러리 함수를 호출, 변수 접근을 가능케 한다.
응용 프로그램이 운영체제마다 다른 이유 _ Why Applications Are Operation-System Specific
각 운영체제는 고유한 시스템 콜 집합을 사용하기에 프로그램을 각각 다른 운영체제에서 실행하기 어렵기에, 아래와 같은 방법을 사용할 수 있다.
- 인터프리터 언어로 작성
- 가상 머신을 가진 언어로 작성
- 기기나 운영체제 고유의 이진 파일을 생성하는 표준 언어 또는 API 사용
그러나 기능이 제한되거나 이식에 많은 시간이 소요된다.
운영체제 설계 및 구현 _ Operating-System Design and Implementation
- 접근 방법
- 설계 목표
- 사용자 목적
- 시스템 목적
- 기법과 정책의 분리
- 기법 : 어떻게 할 것인가
- 정책 : 무엇을 할 것인가
- 자원 할당 문제에 있어 중요하다.
- 구현
- 초기엔 기계어로 작성되었으나 고급 언어로 전환
- 하드웨어 이식성을 고려
- 설계 목표
운영체제 구조 _ Operation-System Structures
일반적인 접근 방법은 한 개의 일관된 시스템보다는 태스크를 작은 구성요소로 분할하는 것이다.
- 모놀리식 구조 (Monolithic Structure)
- 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 넣는 것
- 단순하나 구현 및 확장이 어렵다.
- 오버헤드가 없고 통신 속도가 빠르다.
- 계층적 접근 (Layered Approach)
- 특정된, 한정된 기능을 가진 개별적 작은 구성요소가 합쳐져 커널을 구성
- 구성요소가 모듈 방식으로 다른 구성요소에는 영향을 미치지 않음
- 유지보수 용이
- 마이크로커널 (Microkernels)
- 모놀리식 구조에서 덜 중요한 구성요소를 커널에서 제거하고 사용자 수준 프로그램으로 구현
- 최소한의 프로세스와 메모리 관리 커널
- 확장이 매우 용이하고 높은 보안성, 신뢰성
- 기능이 많아지면 오버헤드로 성능 보장은 다소 어려움
- 모듈 (Modules)
- 적재가능 커널 모듈(Loadable Kernel Modules, LKM) 기법 사용
- 커널은 핵심만, 부팅 혹은 실행 중에 부가적 서비스를 모듈을 통하여 링크; 일반적 추세
- 계층 구조와 유사하나 모듈간 호출이 가능하여 보다 유연
- 핵심 + 모듈 구조는 마이크로커널과 유사하나 통신에 메시지 전달을 호출할 필요가 없어 보다 효율적
- 하이브리드 시스템 (Hybrid Systems)
- 하나의 구조를 채택한 운영체제는 거의 존재하지 않고 혼용 구조로 구성
- Linux는 모놀리식 구조이나 새로운 기능을 동적으로 커널에 추가 가능 (ex. 안드로이드는 Linux 커널 위에 라이브러리로 동작)
운영체제 빌딩과 부팅 _ Building and Booting an Operating System
- 운영체제 생성(빌드)
- 운영체제 생성(빌드) 절차
- 운영체제 소스 코드 작성
- 운영체제가 실행될 시스템의 운영체제 구성
- 운영체제 컴파일
- 설치
- 부팅
시스템의 크기, 일반성, 하드웨어 구성 등에 따라 접근 방식이 바뀌며 정적 하드웨어 구성(임베디드 시스템)을 할지 동적 변경을 위한 하드웨어 구성(데스크탑, 랩탑) 할지 결정한다.
- 시스템 부트
- 시스템 부팅: 커널을 적재하여 컴퓨터를 시작하는 것으로 절차는 아래와 같다.
- 부트스트랩 프로그램 혹은 부트 로더가 커널의 위치를 탐색
- 커널이 메모리에 적재하고 시작된다.
- 커널이 하드웨어를 초기화
- 루트 파일 시스템 마운트
운영체제 디버깅 _ Operating-System Debugging
- 디버깅 : 하드웨어와 소프트웨어에서 시스템 오류를 발견하고 수정하는 행위로, 병목 현상을 제거하여 성능을 향상시키는 튜닝도 디버깅에 포함된다.
- 장애 분석 : 로그 파일, 코어 덤프(프로세스가 사용하던 메모리 캡처), 크래시 덤프(커널 장애 시 메모리 상태 캡처)
대략적인 구조를 정립..하였고 다음번은 프로세스!