본문 바로가기

공부 기록/OS

[OS/공룡책] Chapter 2. 운영체제 구조 - 연습 문제

1) 시스템 콜의 목적은 무엇인가?

- 시스템 콜은 사용자 수준 프로세스가 운영체제의 서비스를 요청하는 것을 허용한다.


2) 명령 인터프리터의 목적은 무엇인가? 통상 커널에 포함되지 않는 이유는 무엇인가?

- 명령 인터프리터는 사용자 또는 명령 파일에서 명령을 읽고, 일반적으로 하나 이상의 시스템 콜로 변환하여 실행한다. 명령 인터프리터는 변경될 수 있으므로 일반적으로 커널의 일부가 아니다.


3) UNIX 시스템에서 새 프로세스를 시작하기 위해 명령 인터프리터나 셸에서 어떤 시스템 콜이 실행되어야 하는가?

- 새 프로세스를 시작하기 위해서는 fork() 시스템 콜과 exec() 시스템 콜이 수행되어야 한다. fork() 시스템 콜은 현재 실행 중인 프로세스를 복제하는 반면, exec() 시스템 콜은 호출 프로세스에 대해 다른 실행 파일을 기반으로 하는 새 프로세스를 덮어쓴다.


4) 시스템 프로그램의 목적은 무엇인가?

- 시스템 프로그램은 유용한 시스템 콜의 묶음으로 생각될 수 있다. 시스템 프로그램은 사용자가 일반적인 문제를 해결하기 위해 자체 프로그램을 작성할 필요가 없도록 기본적인 기능을 제공한다.


5) 시스템 설계 시 계층화된 접근 방식의 주요 장점은 무엇인가? 계층화된 접근 방식의 단점은 무엇인가?

- 모듈식 설계의 모든 경우와 마찬가지로, 운영체제의 모듈식 설계는 몇 가지 장점이 있다. 변경 사항이 시스템의 제한된 부분에만 영향을 미치므로 시스템을 디버깅하고 변경하기 쉽다. 정보는 필요한 곳에만 저장되고, 제한된 영역 내에서만 접근 가능하기 때문에 해당 데이터에 영향을 미치는 어떤 버그라도 특정 모듈 또는 계층으로 제한되어야 한다. 계층화된 접근 방식의 주요한 단점은 운영체제가 제공하는 서비스를 얻기 위해 다른 계층을 통과하는 오버헤드로 인한 성능이 저하되는 것이다.


6) 운영체제에서 제공하는 5가지 서비스를 나열하고 각 서비스가 사용자에게 편의를 제공하는 방법을 설명하라. 사용자 수준 프로그램이 이러한 서비스를 제공할 수 없는 경우는 언제인가? 여러분의 답을 설명하라.

1. 프로그램 실행 : 운영체제는 파일의 내용(또는 섹션)을 메모리에 로드하고 실행을 시작한다. 사용자 수준 프로그램은 CPU 시간을 적절하게 할당하는지 신뢰할 수 없다.

2. 입출력 운영 : 디스크, 테잎, 기타 다른 장치들과 매우 낮은 수준에서 통신할 필요가 있다. 사용자는 장치와 그 장치에서 수행할 작업을 지정하기만 하면 되며, 시스템은 해당 요청을 장치별 또는 컨트롤러별 명령으로 변환한다. 사용자 수준 프로그램은 접근해야 하는, 또한 사용되지 않는 장치에만 접근하는지 신뢰할 수 없다.

3. 파일 시스템 조작 : 파일 생성, 삭제, 할당, 네이밍에는 사용자가 수행하지 않아도 되는 많은 세부 사항들이 있다. 디스크 공간 블록은 파일에서 사용되며, 추적되어야 한다. 파일을 삭제하기 위해서는 이름 파일 정보를 삭제하고 할당된 블록을 해제해야 한다. 적절한 파일 접근을 보장하기 위해 보호 기능도 체크해야 한다. 사용자 수준 프로그램은 보호 방법에 대한 준수를 보장할 수 없으며, 할당 가능한 블록만 할당하고 파일 삭제 시 할당된 블록을 해제하는지 신뢰할 수 없다.

4. 통신(커뮤니케이션) : 시스템 간 메시지를 전달하려면 메시지가 정보 패킷으로 변환되어 네트워크 컨트롤러로 전송되고, 통신 매체를 통해 전송되며, 대상(목적지) 시스템에 의해 재구성되어야 한다. 패킷 순서 지정 및 데이터 수정을 수행해야 한다. 다시 말하지만, 사용자 수준 프로그램은 네트워크 장치에 대한 액세스를 조정하지 않거나 다른 프로세스로 향하는 패킷을 수신할 수도 있다.

5. 오류 검출 : 오류 검출은 하드웨어 및 소프트웨어 수준에서 모두 발생한다. 하드웨어 수준에서 모든 데이터 전송을 검사하여 전송 중에 데이터가 손상되지 않았는지 확인해야 한다. 미디어의 모든 데이터는 미디어에 기록된 이후에 변경되지 않았는지 확인되어야 한다. 소프트웨어 수준에서 미디어는 데이터 일관성을 검사해야 한다. 예를 들어 할당된 스토리지 블록과 할당되지 않은 스토리지 블록의 수가 장치의 총 수와 일치하는지 확인해야 한다. 오류는 종종 독립적으로 처리되므로(디스크의 데이터 손상 등) 모든 유형의 오류에는 글로벌 프로그램(운영체제)이 있어야 한다. 또한 운영체제에 의해 오류가 처리될 때 프로세스는 시스템에서 가능한 모든 오류를 포착하고 바로잡기 위한 코드를 포함할 필요가 없다.


7) 일부 시스템은 운영체제를 펌웨어에 저장하고 다른 시스템은 디스크에 저장하는 이유는 무엇인가?

- 임베디드 시스템과 같은 특정 장치의 경우 파일 시스템이 있는 디스크를 장치에 사용할 수 없을 수도 있다. 이 경우 운영 체제를 펌웨어에 저장해야 한다.


8) 부팅할 운영체제를 선택할 수 있도록 시스템을 설계하는 방법은 무엇인가? 부트스트랩 프로그램이 해야 할 일은 무엇인가?

- Windows와 세 가지 다른 리눅스 배포판(RedHat, Debian, Ubuntu 등)을 모두 실행하려는 시스템을 생각해 보자. 각 운영체제는 디스크에 저장된다. 시스템이 부팅되는 동안 부트 매니저라고 불리는 특수한 프로그램이 부팅할 운영 체제를 결정한다. 즉, 운영체제로 처음 부팅하지 않고 시스템 시작 중에 부트 매니저가 먼저 실행되는 것이다. 부팅할 시스템을 결정하는 것은 이 부트 매니저다. 일반적으로 부트 매니저는 시스템 시작 시 인식될 수 있도록 하드 디스크의 특정한 영역에 저장되어야 한다. 부트 매니저는 종종 부팅할 시스템의 선택 권한을 사용자에게 제공한다. 사용자가 선택하지 않은 경우 부트 매니저는 기본(default) 운영체제를 부팅하도록 설계된다.


해답 PDF

https://codex.cs.yale.edu/avi/os-book/OS10/practice-exercises/PDF-practice-solu-dir/2.pdf

 

오역이 있다면 댓글로 알려주세요.