본문 바로가기
컴퓨터 공학·과학 이론/운영체제(Operating System)

[운영체제] 1장 서론 - 연습문제 해답

by 연구자 공학코드 2021. 11. 4.

공지사항

  1. 제가 운영하는 네이버 카페 개발자 커뮤니티 코어큐브(https://cafe.naver.com/ewsncube)에 가입하시면 컴퓨터 관련 학습 자료와 질의응답을 제공받으실 수 있습니다.

728x90
반응형

저자가 홈페이지에서 제공하는 답 위주로 적었고 내용 보충이 필요한 경우 내가 생각하는 답을 추가하였다.

 

1.1. 운영체제의 세 가지 주요 목적은 무엇인가?

다음과 같이 3가지 주요 목적이 있다.

  • 컴퓨터 사용자에게 프로그램을 실행하기 편리하고 효율적인 환경을 제공하는 것이다.
  • 태스크(Task)를 수행하기 위해 가능한 공정하고 효율적이게 컴퓨터 자원을 할당하는 것이다.
  • 프로그램을 제어하는 것이다. 사용자 프로그램의 실행을 감독하고 오류 및 부적절한 사용을 방지하는 것과 연산 및 I/O 장치 제어를 관리하는 것이 있다.

 

1.2 컴퓨팅 하드웨어를 효율적으로 사용하려면 운영체제가 필요하다고 강조하였다. 운영체제가 이 원칙을 버리고 자원을 낭비하는 것이 적절한 때는 언제인가? 그러한 시스템이 실제로 낭비하는 것이 아닌 이유는 무엇인가?

GUI(Graphic User Interface)같이 사용자와 시스템 간의 상호작용이 우선되는 경우 CPU 사이클이 낭비될 수 있다.

 

공학코드 : 자원 낭비의 기준을 묻는 문제이다. GUI 프로그램처럼 사용자의 입력을 주기적으로 확인하는 프로그램의 경우 실제로 사용자 입력이 없어도 사용자 입력을 확인하기 위해 컴퓨터 자원을 계속 사용하는데 이 경우 자원 낭비로 보일 수 있다. 하지만 사용자에게 적절한 응답을 제공하기 위해 사용자 입력이 있는지를 주기적으로 확인하는 것을 자원 낭비라고 보는 것 보다는 요구사항에 따른 적절한 자원 사용으로 보는 것이 적합하다.

 

1.3 실시간 환경을 위해 운영체제를 작성할 때 프로그래머가 극복해야하는 주요 어려움은 무엇인가?

실시간 환경에서는 시간적 제약이 주요 어려움이다. 제한된 시간 내에 태스크를 끝내지 못하면 전체 시스템이 망가질 우려가 있다. 그러므로 실시간 시스템을 위한 운영체제를 설계하는 경우 설계자는 시간적 제약을 고려하여 응답 시간이 제한된 시간을 초과하지 않도록 스케줄링 하여야 한다.

 

공학코드 : 실시간 환경은 제한된 시간 안에 프로그램이 수행되어야 하기 때문에 시간제약이 실시간 환경(실시간 운영체제)에서 가장 큰 어려움이다.

 

1.4 운영체제의 다양한 정의를 염두에 두고 운영체제에 웹 브라우저 및 메일 프로그램과 같은 응용 프로그램이 포함되어야 하는지 생각해 보라. 포함시킨다와 포함시키지 않는다는 주장 모두의 입장에서 논증하라.

  • 널리 사용되는 응용 프로그램을 운영 체제에 포함하는 것을 찬성하는 주장 : 응용 프로그램이 운영 체제 내에 포함되어 있으면 커널의 기능을 더 잘 활용할 수 있으므로 외부에서 실행되는 응용 프로그램보다 성능 이점이 있다.
  • 널리 사용되는 응용 프로그램을 운영 체제에 포함하는 것을 반대하는 주장 : 그러나 일반적으로 운영 체제 내에 애플리케이션을 내장하는 것에 반대하는 주장이 지배적이다. (1) 애플리케이션은 운영 체제의 일부가 아니며 (2) 커널 내에서 실행되는 어떤 성능 이익도 보안 취약성에 의해 상쇄되며 (3) 애플리케이션의 포함은 비대해진 운영 체제를 초래한다.

 

필자 : 운영체제에 포함된다는 것이 윈도우처럼 운영체제와 응용 프로그램을 같이 패키지로 포함해서 제공한다는 것이 아니라 커널 안에 응용 프로그램이 탑재된다고 해석하여야 한다. 커널 안에 응용 프로그램이 있으면 응용 프로그램이 운영체제에게 특정 기능을 서비스를 요청하는 시간 등을 줄일 수 있으므로 성능상 이점이 있으나 운영체제 기능 측면에서는 불필요한 응용 프로그램이 커널 내에 탑재되므로 불필요한 보안 문제 발생 및 커널 비대화로 인한 유지보수성이 저하하는 문제가 있다.

 

5. 커널 모드와 사용자 모드의 구별은 기본적인 형태의 보호(보안)로써 어떤 기능을 하는가?

커널 모드와 사용자 모드의 차이는 다음과 같은 방법으로 기본적인 형태의 보호를 제공한다. CPU가 커널 모드에 있을 때만 특정 명령을 실행할 수 있다. 마찬가지로 하드웨어 장치들은 프로그램이 커널 모드에 있을 때만 접근할 수 있고 인터럽트는 CPU가 커널 모드에 있을 때만 활성화되거나 비활성화될 수 있다. 따라서 사용자 모드에서 실행할 때 CPU의 기능이 매우 제한되므로 중요한 리소스를 보호할 수 있다.

 

1.6. 다음 중 특권 명령이어야 하는 명령어는 무엇인가?

 a. 타이머 설정

 b. 클록 읽기

 c. 메모리 내용 삭제

 d. 트랩 명령의 실행

 e. 인터럽트 끄기

 f. 장치 상태 테이블의 항목 수정

 g. 사용자에서 커널 모드로 전환

 h. I/O 장치 액세스

 

1.7 일부 초기 컴퓨터는 운영체제를 사용자 작업이나 운영체제 자체에서 수정할 수 없는 메모리 파티션에 배치하여 운영체제를 보호하였다. 이러한 기법에서 발생할 수 있다고 생각되는 두 가지 어려움을 설명하라.

운영 체제에 필요한 데이터(암호, 액세스 제어, 회계 정보 등)가 보호되지 않은 메모리에 저장되거나 통과되어야 하므로 권한이 없는 사용자가 액세스할 수 있다.

 

필자 : (두 가지 어려움 중에 하나만 저자 해답에 적혀있어서 보충한다) 운영체제 자체에서 수정할 수 없는 메모리 파티션에 배치되기 때문에 운영체제를 유지보수하기 어려운 문제가 있다. 별도의 장비로 메모리 파티션에 배치된 운영체제를 적재하는 것 등으로 운영체제를 수정해야 한다.

 

1.8 일부 CPU는 세 개 이상의 작동 모드를 제공한다. 이 다중 모드를 사용할 수 있는 두 가지 경우는 무엇인가?

대부분의 시스템은 사용자 모드와 커널 모드만 구분하지만 일부 CPU는 여러 모드를 지원한다. 여러 모드를 사용하여 보다 세분화된 보안 정책을 제공할 수 있다. 예를 들어, 사용자 모드와 커널 모드만 구별하는 대신 다른 유형의 사용자 모드를 구별할 수 있다. 같은 그룹에 속한 사용자가 서로의 코드를 실행할 수도 있다. 이 사용자 중 한 명이 코드를 실행하고 있을 때 컴퓨터는 지정된 모드로 들어간다. 머신이 이 모드에 있을 때 그룹의 구성원은 그룹의 다른 사람에게 속한 코드를 실행할 수 있다.

또 다른 가능성은 커널 코드 내에서 다른 구분을 제공하는 것이다. 예를 들어 특정 모드에서는 USB 장치 드라이버를 실행할 수 있다. 이는 USB 장치가 커널 모드로 전환하지 않고도 서비스될 수 있음을 의미하므로 본질적으로 USB 장치 드라이버가 준 사용자/커널에서 실행될 수 있다.

 

1.9 타이머는 현재 시간을 계산하는 데 사용될 수 있다. 어떻게 계산이 가능한지 간단하게 설명하라.

프로그램은 타이머 인터럽트를 사용하여 현재 시간을 계산하기 위해 다음 접근 방식을 사용할 수 있다. 프로그램은 미래의 일정 시간 동안 타이머를 설정하고 절전 모드로 전환할 수 있다. 인터럽트에 의해 깨어나면 로컬 상태를 업데이트하여 지금까지 받은 인터럽트 수를 추적하는 데 사용한다. 그런 다음 타이머 인터럽트를 지속적으로 설정하고 인터럽트가 실제로 발생할 때 로컬 상태를 업데이트하는 이 프로세스를 반복할 수 있다.

 

공학코드 : 타이머는 지정된 시간이 되면 인터럽트를 발생시키므로 얼마나 시간이 지났는지 알 수 있기에 현재 시간을 계산할 수 있다.

 

1.10 캐시가 유용한 두 가지 이유를 제시하라. 어떤 문제를 해결할 수 있는가? 어떤 문제를 야기하는가? 캐시의 크기를 캐싱하는 장치만큼 크게 만들 수 있다면(예: 디스크의 크기와 같은 캐시) 캐시의 용량을 늘린 후 원래 장치를 제거하지 않는 이유는 무엇인가?

캐시는 둘 이상의 장치가 데이터를 교환해야 하고 장치가 서로 다른 속도로 전송을 수행할 때 유용하다. 캐시는 구성 요소 사이에 중간 속도의 버퍼를 제공하여 전송 문제를 해결한다. 빠른 장치가 캐시에서 필요한 데이터를 찾으면 느린 장치를 기다릴 필요가 없다.

캐시의 데이터는 구성 요소의 데이터와 일관성을 유지해야 한다. 구성 요소에 데이터 값 변경이 있고 데이터도 캐시에 있는 경우 캐시도 업데이트해야 한다. 이것은 하나 이상의 프로세스가 데이터에 액세스할 수 있는 다중 프로세서 시스템에서 특히 문제이다.

캐시와 장치가 같은 크기의 저장 공간을 갖고 전기가 차단될 때에도 캐시가 데이터를 유지할 수 있는 경우에 장치를 제거하고 캐시로 운영할 수 있다.

 

공학코드 : 장치간의 통신 속도 차이는 병목현상을 만들어내는데 이로 인해 전반적인 시스템 성능 하락을 발생시킬 수 있다. 하지만 통신속도가 빠른 캐시에 느린 장치의 데이터를 담아서 빠른 장치에게 제공한다면 병목으로 인한 성능 하락을 방지할 수 있다. 캐시의 데이터는 장치의 데이터와 동일해야하는 일관성을 유지하는 것이 중요한데 장치의 데이터가 바뀌었음에도 불구하고 캐시의 데이터가 바뀌지 않았고 바뀌지 않은 데이터가 다른 장치에 제공됨에 따라 의도된 것과 다르게 동작할 수 있는 문제가 발생될 수 있다. 이를 해결하기 위한 연구가 활발히 진행되고 있다.

캐시의 기억 용량을 충분히 크게 늘린 후 느린 장치를 제거할 수 없는 이유는 캐시는 고속처리를 위해 고속처리 장치 근처의 한정된 공간을 사용할 수 있기에 대체로 매우 작은 공간만을 활용할 수 있으며 이로 인해 기억가능한 용량이 작기에 대용량 캐시를 구현하는 것은 현실적으로 어렵다. 또한 작은 공간에 대용량 고속처리 스토리지(캐시)를 만드는 것은 비용이 매우 비싸기 때문에 현재의 캐시 설계가 주력으로 활용되는 것이다.

 

1.11 분산 시스템의 클라이언트-서버 시스템과 피어 간 모델의 차이를 설명하라.

클라이언트-서버 모델은 클라이언트와 서버의 역할을 확실히 구분합니다. 이 모델에서 클라이언트는 서버에서 제공하는 서비스를 요청한다. P2P 모델에는 그렇게 엄격한 역할이 없다. 사실, 시스템의 모든 노드는 피어로 간주되므로 클라이언트나 서버 또는 둘 다의 역할을 할 수 있다. 노드는 다른 피어로부터 서비스를 요청할 수 있거나 노드는 실제로 시스템의 다른 피어에게 이러한 서비스를 제공할 수 있다.

예를 들어 요리 레시피를 공유하는 노드 시스템을 생각해보자. 클라이언트-서버 모델에서 모든 레시피는 서버에 저장된다. 클라이언트가 레시피에 액세스하려면 지정된 서버에서 레시피를 요청해야 한다. 피어 투 피어 모델을 사용하여 피어 노드는 지정된 레시피에 대해 다른 피어 노드에 요청할 수 있다. 요청된 레시피가 있는 노드(또는 아마도 노드)는 요청한 노드에 이를 제공할 수 있다. 각 피어가 클라이언트(레서피를 요청할 수 있음)와 서버(레서피를 제공할 수 있음) 모두로 작동한다.

 

공학코드 : 문제의 원문은 "Distinguish between the client–server and peer-to-peer models of distributed systems." 이며 "분산 시스템에서 클라이언트-서버 모델과 P2P(Peer-to-Peer) 모델을 어떻게 구분하는가?"로 해석하여 풀이를 진행하겠다. P2P 모델(Peer-to-Peer model)은 모든 노드(시스템)가 동등한 역할을 수행하는 것을 말하며 클라이언트-서버 모델은 서버가 서비스를 제공하고 클라이언트가 서비스를 제공받는 것을 말한다. 즉, 같은 역할을 수행하는 경우 P2P라고 보며 서비스를 제공하는자와 받는자로 역할이 구분되면 클라이언트-서버 모델로 볼 수 있다.

 

참고자료

[1] Solutions of Practice Exercises, Tenth Edition of Operating System Concepts, AVI SILBERSCHATZ, https://codex.cs.yale.edu/avi/os-book/OS10/practice-exercises/index-solu.html

 

728x90
반응형

댓글