Post

[운영체제] 2주차 과제

운영체제 2주차 과제

1. 컴퓨터 시스템은 계층구조(layered architecture)로 이루어져 있다. 어떤 층으로 구성되는 지 그림으로 그리고, 계층 구조로 설계된 이유 혹은 장점은 무엇인가?

img1

계층 간 독립성을 확보하기 위함이다. 각 계층은 독립성을 유지하고 있기 때문에 어떤 한 계층의 기능이 변경된다고 할 때 해당 계층을 제외한 계층은 영향을 받지 않기에 유지 보수에 용이하다.


2. 36비트 CPU를 사용하는 컴퓨터 시스템이 있다고 하면, 이 시스템에 설치 가능한 메모리의 최대 크기는 얼마인가? 계산을 보여라. 단위는 MB, GB 등으로 표기하라.

36비트 CPU가 액세스할 수 있는 메모리의 최대 범위는 2^36바이트, 64GB이다.


3. 컴퓨터의 하드웨어 구조에 대해 답하라.

  1. CPU 캐시를 사용하는 목적이 무엇인지 다음과 같은 유형으로 한 문장으로 명확히 답하라. (–의 문제점 때문에 발생하는 –를 개선하기 –하는 방식으로 CPU 캐시를 사용한다)

    CPU보다 속도가 느린 메모리로 인해 발생하는 CPU의 대기 시간을 개선하기 위해 메모리의 일부 내용을 캐시에 복사하여 CPU는 캐시에서 명령과 데이터를 읽는 방식으로 CPU 캐시를 사용한다.

  2. 운영체제 입장에서 CPU의 레지스터 중 가장 중요한 2개를 선택하여 그 목적이 무엇이며 중요한 이유를 간단히 설명하라.

    PC – 다음에 실행할 명령의 메모리 주소를 가지는 레지스터로 프로세스 스케줄링 및 다중 프로그램 처리에 중요하다.

    SP – 스택 영역의 꼭대기 메모리 주소를 저장하는 레지스터로 함수가 호출 될 때 매개변수나 지역변수 함수가 실행을 마치고 돌아갈 주소를 저장하고 있어 프로세스 실행 과정에 중요하다


4. 프로그램이 실행될 때 운영체제는 프로그램에게 4개의 공간을 할당한다.

  1. 4개의 공간이 무엇이며, 각 공간은 어떤 용도로 사용되는가?

    Code – 프로그램 코드가 적재되는 메모리 공간 Stack – 함수가 호출될 때 매개변수나 지역 변수, 함수가 실행을 마치고 돌아갈 주소 등을 저장하기 위한 공간 Heap – 프로그램이 실행 중 동적으로 저장할 데이터를 위한 공간

  2. 각 공간에서 프로그램이 적재된 후 실행되는 동안 프로그램이 사용하는 크기가 변하는가, 변하지 않는가?

    Data, Code 영역 - 변하지 않음 Stack, Heap 영역 - 변할 수 있음

  3. 다음 프로그램이 메모리에 적재되었을 때, 이 프로그램을 구성하는 코드와 변수들이 앞의 4개 공간 중 어디에 들어가는지 설명하라.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    int a[200]; 
    void f() { 
    	int b;
    }
    int main() { 
    	int c; 
    	int *p = malloc(100); 
    	f(); 
    } 
    
    1
    2
    3
    4
    
    Code 영역 - 프로그램 코드 전체
    Data 영역 - a (a[0] ~ a[199])
    Stack - b, c, p
    Heap - malloc(100)하여 할당된 메모리 영역
    
  4. 앞의 프로그램이 실행되는 동안 스택에 저장될 변수들은 무엇인가?

    b, c, p

  5. 앞의 프로그램이 실행되기 위해 프로그램이 필요로하는 힙의 최소 크기는 몇 바이트인가?

    malloc(100) -> 100 Byte


5. 컨텍스트와 관련된 질문에 답하라.

  1. 컨텍스트란 무엇인가?

    어떤 프로그램이 실행중인 일체의 상황을 말하며 그 일체의 상황은 메모리와 CPU 레지스터에 담겨 있다

  2. 컨텍스트와 CPU 레지스터는 어떤 관계가 있는가?

    현재 실행중인 프로그램의 컨텍스트는 현재 CPU에 들어있는 레지스터의 값들로 축소하여 정의할 수 있다.

  3. 운영체제가 컨텍스트를 다루는 이유는 무엇인가?

    운영체제가 A 프로그램을 실행하는 도중 일시 중단하고 B 프로그램을 실행할 때 A 프로그램의 컨텍스트를 다른 곳에 복사 해두어 A 프로그램이 다시 실행될 때 중단되기 전과 동일한 상태에서 프로그램을 재개하기 위함이다.

  4. 컨텍스트 스위칭이란 어떤 행위이며, 이때 왜 CPU 레지스터들을 저장하는가? 각 레지스터 에는 어떤 정보가 들어 있기 때문인가?

    운영체제가 현재 실행중인 프로그램 A의 컨텍스트를 저장하고 다른 프로그램 B를 실행시키기 위해 프로그램 B의 저장된 컨텍스트를 CPU로 옮기는 것을 컨텍스트 스위칭이라고 하고, 이 때 PC 레지스터는 프로그램 A가 실행을 재개할 코드의 주소를 가르키고 있다. SP 레지스터는 프로그램 A의 영역을 가르켜 프로그램 A가 중단될 때 실행하던 함수의 매개변수나 지역변수 등이 그대로 들어가 있고 컨텍스트 스위칭 시 프로그램 B에 저장되어 있는 값들로 CPU 내부 값들이 바뀌기 때문에 추후 프로그램 A를 다시 재개하기 위해서는 CPU 레지스터를 저장해두어야 한다.

  5. 컴퓨터마다/운영체제마다 컨텍스트의 크기가 서로 다를 것인지 같을 것인지, 같다면 왜, 다르다면 왜인지 자신의 의견을 논리적으로 말하라.

    다를 것이다. CPU마다 레지스터의 개수와 크기가 다르기 때문에 저장되는 컨텍스트의 크기도 다를 것이라 생각하고, CPU가 지정할 수 있는 주소의 범위 (메모리 용량)에 따라서 컨텍스트의 크기도 다르게 설계할 것이다. 각 OS마다 목적과 기능이 다르기에 이를 위해 컨텍스트의 크기도 다르게 설계할 것이다.


6. 광의의 의미로 운영체제를 구성하는 요소들은 무엇인지 간단히 설명하라.

운영체제는 도구/GUI 소프트웨어, 커널, 디바이스 드라이버들로 구성되는 소프트웨어이다.


7. 사용자, 도구/GUI 소프트웨어, 응용프로그램, 라이브러리, 커널, 디바이스 드라이버, 하드 웨어 등으로 구성되는 전체 컴퓨터 시스템을 그림으로 그리고, 각 요소의 기능을 간단히 설명하라. 이 그림으로 볼 때 운영체제의 목적은 무엇이라고 생각되는가?

img2

도구/GUI 소프트웨어 – 사용자가 컴퓨터를 편리하게 사용할 수 있도록 운영체제 패키지에 포함되어 제공되는 프로그램

응용 프로그램 – 사용자의 편리와 편의를 위해 특정 기능을 수행하는 프로그램

라이브러리 – 다른 프로그램들이 공통적으로 사용할 수 있는 함수, 데이터 또는 리소스의 모음입니다.

커널 – 부팅 후부터 메모리에 상주하며 하드웨어, 프로세스, 파일 시스템 관리 등 운영체제의 핵심 기능을 실행하는 코드와 이들을 관리하기 위한 프로세스 테이블 페이지 테이블 등 여러 자료구조의 집합이다.

디바이스 드라이버 – 장치를 직접 제어하는 소프트웨어이다.

※ 사용자가 컴퓨터 하드웨어에 대한 지식 없이도 컴퓨터를 사용할 수 있도록 하드웨어를 다루는 것이 목적이다


8. 커널은 위로 응용프로그램, 아래로 장치들과 연결된다. 커널은 이들과 통신하기 위해 어떤 인터페이스를 두고 있는가? 인터페이스를 말하고 간단히 설명하라.

시스템 호출 (System call) – 응용 프로그램과 커널 사이의 인터페이스로 응용 프로그램에서 커널 코드를 실행하는 기법이다. 응용 프로그램이 커널의 기능을 활용하려면 시스템 호출 라이브러리에 들어 있는 시스템 호출 함수를 호출하면 된다.

인터럽트 (interrupt) – 커널과 하드웨어 장치 사이의 인터페이스로 하드웨어 장치들이 CPU에게 하드웨어 신호(인터럽트 신호)를 물리적으로 발생시켜, 입출력 완료나 타이머 완료 등을 CPU에게 알리는 방법이다.


This post is licensed under CC BY 4.0 by the author.