쉽게 배우는 운영체제 문제 풀어보기

Updated:

개요

쉽게 배우는 운영체제

비전공자의 입장에서 CS과목을 배우는 것이 결코 쉽진 않았다. 그러던 와중 이 책이 비교적 이해하기 쉽다는 얘기를 듣고, 반년정도 전에 책을 구입했었다.
하지만 시간이 지남에 따라 내용이 하나도 생각이 나지 않아, 다시 한 번 공부함과 동시에 안에 있는 서술문제들을 해결해 보려고 한다.



1장. 운영체제의 개요

1. 운영체제의 역할을 설명하시오.

운영체제는 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어이다.

운영체제는 크게 4가지 역할을 가진다.

  1. 자원 관리 우리는 컴퓨터로 문서를 작성하고, 음악을 듣고, 인터넷을 서핑하는 등 많은 작업을 하는데에 있어서 키보드, 네트워크카드, 사운드카드 등 여러 자원을 사용하는데, 운영체제는 이러한 자원을 응용 프로그램에게 나누어주어 사용자가 원활하게 작업할 수 있도록 돕는다.
  2. 자원 보호 악의적인 사용자 또는 미숙한 사용자로부터 자원을 보호한다. 특정 응용 프로그램이 남의 영역을 침범하여 데이터를 망치는 등 비정상적인 작업으로부터 컴퓨터를 보호한다.
  3. 하드웨어 인터페이스 제공 모든 하드웨어 제품에 따라 항상 서로다른 별도의 소프트웨어를 설치해야 한다면 굉장히 불편할 것이다. 운영체제는 이를 위해 복잡한 과정 없이 다양한 장치를 사용할 수 있도록 하드웨어 인터페이스를 제공한다. 컴퓨터에 드라이버를 설치함으로써 이러한 기능을 제공한다.
  4. 사용자 인터페이스 제공 GUI를 제공하여 작업을 마우스로 수행할 수 있도록 해주고, 더 나아가서는 스마트폰 등에 터치스크린을 적용하여 컴퓨터보다도 편리한 인터페이스를 제공한다.

2. 운영체제의 목표를 설명하시오.

  1. 효율성 자원 관리와 연결된다. 같은 자원을 사용하여 더 많은 작업량을 처리하거나, 같은 작업량을 처리하는 데 보다 적은 자원을 사용하고자 한다. 운영체제의 크기를 최소화하고 운영체제가 사용하는 코드를 최적화해서 효율성을 추구한다.
  2. 안정성 자원 보호와 연결된다. 모든 응용 프로그램은 운영체제 위에서 작업이 이루어지므로, 운영체제가 불안정하면 모든 작업이 불안할 수 밖에 없다. 따라서 운영체제는 안정성이 담보되어야 한다.
  3. 확장성 하드웨어 인터페이스 제공과 연결된다. 운영체제는 하드웨어의 종류에 상관없이 꽂으면 바로 실행할 수 있는 plug & play기능을 제공해야 한다.
  4. 편리성 사용자 인터페이스 제공과 연결된다. 사용자가 편리하게 작업할 수 있는 환경을 제공해야 한다. 운영체제는 효율성을 높이고자 한다면 사용자에게 많은 제약을 가하면 되지만, 이는 사용자를 불편하게 하고 다양한 응용 프로그램의 개발을 방해하므로 운영체제는 자원의 낭비 요소를 막으면서도 사용자에게 다양한 편리성을 제공해야 한다.

3. CPU 집중 작업과 입출력 집중 작업에 대해 설명하시오.

CPU 집중 작업: 일괄 작업 시스템에서는 프로그램이 실행되는 동안에 입출력이 불가능하기 때문에 대부분의 작업이 CPU만 사용하는 계산 작업이었다. CPU 편향 작업 또는 컴퓨터 집중 작업이라고 부른다. 수학 계산과 같은 프로그램은 CPU 집중 작업의 대표적 예이다. 입출력 집중 작업: 대화형 시스템에서는 프로그램이 실행되는 동안에 입출력이 가능하기 때문에 입출력 집중작업이 생겨났다. 입출력 집중 작업 또는 입출력 편향 작업은 대부분의 작업 시간을 주변장치의 입력과 출력에 사용하며, 동영상 플레이어와 데이터베이스 같은 프로그램을 예로 들 수 있다.

4. 실시간 시스템에 대해 설명하시오.

현대의 컴퓨터는 대부분 번갈아가며 CPU를 할당받는 시분할 시스템을 사용한다. 이 때 시분할 시스템의 단점은 작업이 일정 시간 안에 끝나는 것을 보장받지 못한다는 것이다. 따라서 정확한 작업 시간을 보장받아야 하는 경우에는 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 실시간 시스템을 사용한다.

경성 실시간 시스템: 지정한 응답 시간을 정확히 지키는 시스템으로 원자력 발전소의 원자로 온도 제어, 미사일 요격과 같은 작업에 이용된다. 연성 실시간 시스템: 지정한 응답 시간을 최대한 지키지만 융통성이 어느 정도 허용된 시스템이다. 동영상 재생기 등

5. 클라우드 컴퓨팅에 대해 설명하시오.

언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨팅 환경이다. PC, 스마트 기기 등을 통해 인터넷에 접속하고, 다양한 작업을 수행하며, 기기 간의 데이터 이동이 자유로운 컴퓨팅 환경이다. 기존의 이동 저장장치로 데이터를 옮기던 것에 비해 매우 편리한 방식이다.

기존에 회사에서 웹페이지를 서비스하고자 한다면 회사에 서버를 설치하고 보안관리, 서버관리, 네트워크관리 등을 직접 했어야 하는 불편함을 버리고 클라우드 서버에 웹페이지를 올려놓고 사용한 만큼 비용을 지불, 서버관리 및 보안관리 등을 클라우드 서버 서비스사에 위탁할 수 있게 되었다.

구글드라이브 등 일반인들도 쉽게 클라우드 컴퓨팅 환경을 경험할 수 있다.

6. API와 SDK를 비교하여 설명하시오.

API는 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스이다. 반면 SDK는 프로그램 개발자를 위해 API 및 API 사용 매뉴얼뿐만 아니라 개발에 필요한 코드 편집기와 에뮬레이터 같은 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴을 말한다.

7. 단일형 구조 커널의 특징을 설명하시오.

커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있다. 함수를 사용하지 않고 main()에 모든 기능을 구현한 프로그램과 같다. 모듈간의 통신 비용이 줄어들어 효율적인 운영이 가능한 장점이 있지만, 수많은 단점을 수반한다. 첫번째로 모든 모듈이 하나로 묶여 있어 버그나 오류를 처리하기 어렵고 두번째로 여러 기능이 서로 연결되어 있어 상호 의존성이 높고 세번째로 수정이 어렵기 때문에 이식성이 낮고 마지막으로 현대의 운영체제는 워낙 크고 복잡하므로 단일형 구조의 운영체제를 구현하기가 어렵다.

8. 마이크로 구조 커널의 특징을 설명하시오.

프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공한다. 다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있다. 커널은 메모리 관리와 프로세스 간의 동기화 서비스를 제공하며, 메모리 관리자와 동기화 모듈은 프로세스 간 통신 모듈로 연결되어 있다. 그러므로 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통신을 이용하여 이루어진다.




2장. 컴퓨터의 구조와 성능 향상

1. 컴퓨터에서 클록이 하는 역할을 설명하시오.

클록은 일정 간격으로 을 만들어내고, 모든 부품들은 이에 맞춰 작업을 한다. 이 틱에 맞추어 여러 부품들이 버스를 통해 데이터를 보내거나 받는다.

2. 프로그램 카운터 레지스터의 역할을 설명하시오.

다음에 실행해야 할 명령어의 주소를 기억한다.

3. 제어 버스, 주소 버스, 데이터 버스에 대해 설명하시오.

제어 버스: 다음에 어떤 작업을 할지에 대한 제어 신호가 오간다. CPU의 제어장치와 연결되어 신호를 주고받는다. 메모리나 주변장치에 신호를 보내기도 하고, 오류가 발생했을 때 신호를 받는 등 양방향 통신을 한다.
주소 버스: 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치 정보가 오간다. CPU에서 일방적으로 정보를 받고 메모리나 주변장치에 알려주기 때문에 단방향 통신이다.
데이터 버스: 제어 버스와 주소 버스를 통해 명령과 주소 정보가 전달되면 데이터는 데이터 버스에 실려 이동한다. CPU의 메모리 버퍼 레지스터와 연결되어 있다.

4. 휘발성 메모리와 비휘발성 메모리를 비교하여 설명하시오.

휘발성 메모리는 일반적으로 사용하는 메모리 또는 캐시와 같은 것들로, 전력의 공급이 차단 될 경우 모든 정보를 잃고 다시 초기 상태로 되돌아간다. 반면에 비휘발성 메모리는 전력공급이 끊겨도 그 상태가 온전히 남으며 USB 등이 이에 해당한다. 대체적으로 휘발성 메모리는 속도가 매우 빠르지만 같은 저장용량에 대해 가격이 비싸다.

5. DDR SDRAM에 대해 설명하시오.

기존의 SDRAM은 시스템 버스와 같은 속도로 느리게 작동하여 전반적인 작업속도를 떨어뜨렸다. 그렇기에 클록틱 당 저장할 수 있는 워드의 수(대역폭)을 늘려 이러한 데이터 입출력 속도를 빠르게 하였다. 현재는 DDR4 SDRAM이 보급되어지고 있다.

6. 스풀에 대해 설명하시오.

CPU와 입출력장치가 독립적으로 동작하도록 고안한 소프트웨어적 버퍼이다. 버퍼는 프로그램들이 함께 공유하지만 스풀러는 프로그램간 배타적이다.

7. 즉시 쓰기 방식의 캐시와 지연 쓰기 방식의 캐시를 비교하여 설명하시오.

즉시 쓰기는 캐시에 있는 데이터가 변경된다면 이를 즉시 메모리에 반영한다. 매번 갱신하므로 속도는 느리지만 정확하다. 반면 지연 쓰기는 데이터를 매번 갱신하지 않고 모아두었다가 일정 주기에 따라 갱신한다. 갱신횟수가 적으므로 속도는 빠르지만 때떄로 데이터의 불일치가 발생할 수 있다.

8. 인터럽트 번호를 사용하는 이유를 설명하시오.

컴퓨터는 수많은 입출력장치와 연결되어 있다. 번호를 통해서 어떤 입출력 장치의 작업이 끝났는지 구분하여 CPU에게 알려줄 필요가 있다.

9. 메모리 직접 접근(DMA)에 대해 설명하시오.

인터럽트 방식을 통해 데이터의 입출력을 입출력 관리자가 맡게 되었다. 본래 메모리에는 CPU만 접근할 수 있기 때문에 입출력 관리자에게 메모리에 접근할 수 있는 권한인 메모리 직접 접근 권한을 부여한다.

10. 메모리 매핑 입출력에 대해 설명하시오.

메모리 직접 접근에 의해 메모리에 접근할 수 있는 권한을 CPU입출력 관리자모두 가지게 되었고, 결과적으로 메모리의 사용이 혼란스러울 수 있다. 이를 예방하기 위해 CPU의 작업 영역과 입출력 작업 영역을 분리하여 할당하게 되고 이를 메모리 매핑 입출력이라고 한다.




3장. 프로세스와 스레드

1. 다섯 가지 프로세스 상태도를 그리시오.

(생략)

2. 프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명하시오.

휴식 상태: 프로세스가 작업을 일시적으로 쉬고 있는 상태이다. 여전히 프로세스가 메모리에 머물러 있다. 보류 상태: 프로세스가 메모리에서 잠시 쫓겨난 상태이다. 프로그램에 오류가 있거나 메모리가 꽉 차 우선순위에 밀린 경우 등이다. 프로세스가 스왑영역으로 보내진다.

3. 프로세스 제어 블록의 구성에 대해 설명하시오.

포인터: 다른 프로세스 제어 블록을 연결하여 준비 상태나 대기 상태의 큐를 구현한다.
프로세스 상태: 생성, 주비, 실행, 대기, 보류 준비, 보류 대기 등 상태를 저장한다.
프로세스 구분자: 여러 프로세스를 구분하는 ID이다.
프로세스 카운터: 다음 실행될 명령어의 위치를 가리킨다.
프로세스 우선순위: CPU를 할당받기 위한 우선순위를 나타낸다.
레지스터 정보: 자신이 사용하던 레지스터의 중간값을 보관한다.
메모리 관리 정보: 프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치 정보, 메모리 보호를 위한 경계 레지스터 값과 한계 레지스터 값 등을 저장한다.
할당된 자원 정보: 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보
계정 정보: 계정 번호, CPU 할당 시간, CPU 사용 시간 등
PPID, CPID: 부모 프로세스와 자식 프로세스를 가리키는 ID이다.

4. 문맥 교환에 대해 설명하시오.

CPU를 다른 프로세스에게 할당하고자 할 때 일어나는 현상이다. 실행 상태에 있던 프로세스의 PCB에 진행 정보를 저장하고, 새로이 실행 상태에 들어오는 프로세스의 PCB내용을 세팅한다. 즉 두 프로세스의 PCB를 교환하는 작업이다.

5. 프로세스를 구성하는 코드 영역, 데이터 영역, 스택 영역에 대해 설명하시오.

코드 영역: 프로그래머가 작성한 코드가 탑재되어 있다. 읽기 전용이다.
데이터 영역: 코드가 실제로 실행되면서 사용하는 변수나 파일 등 여러 데이터를 모아놓는 곳이다.
스택 영역: 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓는 곳이다. 사용자에게는 보이지 않는다.

6. fork() 시스템 호출의 장점을 설명하시오.

첫 번째로, 프로세스의 생성 속도가 빠르다. 하드디스크로부터 불러오는 것이 아닌 메모리에 있는 기존의 정보를 복사하기 때문이다. 두 번째로, 추가 작업 없이 부모 프로세스가 사용하던 자원을 추가 작업 없이 자식 프로세스에 상속할 수 있다. 마지막으로 시스템 관리를 효율적으로 할 수 있다. 서로 부모 프로세스 구분자와 자식 프로세스 구분자로 연결되어 있어 자식 프로세스 종료 후 정리를 부모 프로세스에게 위임할 수 있다.

7. exec() 시스템 호출을 사용하는 이유를 설명하시오.

기존에 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 그대로 활용 한 채 코드 영역만 바꾸면 되기 때문에 운영체제의 작업이 수월하다.

8. 프로세스 계층 구조의 장점을 설명하시오.

여러 작업을 동시에 처리할 수 있다. fork()를 통해 login 프로세스를 복사하여 여러 사용자에게 나누어주거나, 사용이 종료된 login프로세스를 exec() 시스템 호출을 통해 shell 프로세스로 다시 활용하는 등 자원을 효율적으로 관리한다. 또한 프로세스 간의 책임 관계가 분명해져 시스템 관리가 수월하다. 운영체제가 종료된 프로세스의 모든 자원을 직접 회수 할 필요 없이 부모 프로세스에게 위임할 수 있다.

9. 멀티스레드, 멀티태스킹, 멀티프로세싱, CPU 멀티스레드를 비교하여 설명하시오.

멀티스레드: 하나의 프로세스 내 작업을 여러개의 스레드로 분할하는 프로세스 운영 기법이다.
멀티태스킹: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법이다. 시분할 시스템이라고도 한다.
멀티프로세싱: 여러개의 스레드를 여러개의 CPU를 사용하여 동시에 처리하는 작업 환경이다.
CPU 멀티스레드: 한번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법이다.




4장. CPU 스케줄링

1. 스케줄링의 단계와 그 특징을 설명하시오.

스케줄링은 크게 고수준 스케줄링, 저수준 스케줄링, 중간수준 스케줄링으로 나눈다.

고수준 스케줄링: 시스템 내에 전체 작업 수를 조절한다. 작업 요청이 오면 스케줄러가 시스템의 상황을 고려하여 작업을 승인할지, 거부할지 결정하여 시스템 내에 동시에 실행 가능한 프로세스의 갯수를 결정한다.
저수준 스케줄링: 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼 지 등 프로세스의 상태를 결정한다.
중간 수준 스케줄링: 중지활성화로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막는다. 일부 프로세스를 보류 상태로 옮기는 등 다른 프로세스의 원만한 작동을 돕는다.

2. 스케줄링의 목적을 설명하시오.

공평성: 모든 프로세스가 공평하게 배정받을 수 있도록 한다.
효율성: 시스템 자원이 유휴 시간 없이 사용되도록 한다.
안정성: 우선순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정, 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호한다.
확장성: 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치한다. 반대로 시스템 자원이 늘어나면 이 혜택이 반영되도록 한다.
반응 시간 보장: 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야 한다.
무한 연기 방지: 특정 프로세스의 작업이 무한이 연기되어서는 안 된다.

3. 선점형 스케줄링과 비선점형 스케줄링을 비교하여 설명하시오.

선점형 스케줄링: CPU를 할당받은 프로세스가 있을 때, 운영체제가 이 CPU를 강제로 빼앗을 수 있는 스케줄링 방식이다.
비선점형 스케줄링: CPU가 할당받은 프로세스가 있을 때, 다른 프로세스가 이를 함부로 빼았을 수 없는 스케줄링 방식이다.

4. 스케줄링 알고리즘의 선택 기준에 대해 설명하시오.

CPU 사용률: 전체 시스템의 동작 시간 중 CPU가 사용된 시간을 측정하는 방법
처리량: 단위 시간당 작업을 마친 프로세스의 수. 클수록 좋다.
대기 시간: 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기하는 시간
응답 시간: 프로세스 시작 후 첫 번째 출력 또는 반응이 나올 때까지 걸리는 시간
반환 시간: 프로세스가 생성된 후 종료되어 사용하던 자원을 모두 반환하는 데까지 걸리는 시간

5. FCFS, SJF, HRN 스케줄링의 특징을 설명하시오.

모두 비선점형 알고리즘이다.

FCFS(First Come First Serve): 프로세스가 준비 큐에 들어온 순서대로 CPU를 할당받는다. 앞의 프로세스의 실행 시간이 길수록 뒤의 프로세스가 오래 기다리게 되는 콘베이 효과가 있을 수 있다.
SJF(Shortest Job First): 예상 실행시간이 가장 적은 프로세스부터 CPU를 할당받는다. 첫 번째로 실행시간을 예측하기 힘들고, 두 번째로 예상 실행시간이 적은 프로세스가 계속 들어온다면 긴 프로세스는 계속해서 기다려야 하는 아사현상이 있을 수 있어 사용되지 않는다.
HRN(Highest Response Ratio Next): SJF의 아사현상을 해결하고자 만들어졌다. 실행 시간 뿐만 아니라 기다린 시간까지 함께 고려한다. 하지만 여전히 대기 시간이 측정하기 힘들다는 한계가 있다.

6. 라운드 로빈, SRT, 다단계 큐, 다단계 피드백 큐 스케줄링의 특징을 설명하시오.

모두 선점형 알고리즘이다.

라운드 로빈: FCFS와 유사하다. 타임 슬라이스를 정해 두고 프로세스가 준비 큐에 들어온 순서대로 돌아가며 CPU를 할당받는다. 콘베이 효과는 줄어들지만 문맥 교환 비용 등으로 항상 효율적인 것은 아니다.
SRT(Shortest Remaining Time): SJF의 선점형 알고리즘 버전이다. 여전히 대기 시간이 측정하기 힘들다는 점과 아사 현상을 해결하기 힘들다는 한계가 있다.
다단계 큐: 우선순위에 따라 여러 큐를 사용하는 방식이다. 고정형 우선순위를 사용하며 상위 우선순위의 큐가 모두 비워져야 하위 우선순위의 큐 작업을 시작한다. 하지만 하위 우선순위를 가진 프로세스들은 작업이 오래 연기된다는 한계가 있다.
다단계 피드백 큐: 다단계 큐의 문제점을 보완하여, 프로세스가 CPU를 사용한 뒤에 원래의 큐로 돌아가는 것이 아닌 하위 우선순위의 큐로 들어간다. 이렇게 실행 될 수록 우선순위를 낮춰 모든 프로세스가 연기되지 않고 실행될 수 있도록 한다. 여전히 우선순위가 낮은 프로세스는 CPU를 사용할 기회가 적다는 점을 보완하기 위해 우선순위가 낮을 수록 더 긴 시간동안 CPU를 사용할 수 있도록 한다.

7. 아사 현상과 에이징에 대해 설명하시오.

아사 현상은 프로세스가 특정 알고리즘에 의해 우선순위가 밀려 언제까지고 CPU를 할당받을 수 없는 현상을 말한다. SJF알고리즘에서 쉽게 찾아볼 수 있다. 에이징은 이를 예방하고자 자신의 차례를 양보할 수 있는 횟수의 한계를 정해놓는 것이다.

8. 타임 슬라이스의 크기를 정하는 것과 시스템 효율성에 대해 설명하시오.

타임 슬라이스의 크기가 너무 크다면 프로세스 하나가 통째로 실행되고 나서야 다음 프로세스가 실행 될 것이다. 이는 FCFS와 같기 때문에 타임 슬라이스를 지정하는 의미가 없다. 반대로 타임 슬라이스의 크기가 너무 작다면, 실제로 프로세스가 CPU를 사용하는 시간에 비해 다음 프로세스로 교체하는 문맥 교체 비용이 커져서 비효율 적인 자원 활용으로 이어지기 떄문에 적절한 타임 슬라이스를 지정하는 것이 중요하다.




5장. 프로세스 동기화

1. 프로세스 간 통신을 통신 방향에 따라 분류하여 설명하시오.

양방향 통신: 데이터를 동시에 양쪽 방향으로 전송할 수 있다. 프로세스 간 통신 중 소켓 통신이 해당한다.
반양방향 통신: 데이터를 양쪽 방향으로 전송할 수 있으나 동시 전송은 불가능하다. 무전기 등
단방향 통신: 데이터를 한쪽 방향으로만 전송할 수 있다. 프로세스 간 통신 중 전역 변수, 파이프, 파일 등이 해당한다.

2. 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오.

대기가 있는 통신: 동기화를 지원하는 통신 방식이다. 데이터를 받는 쪽은 데이터가 올 때 까지 자동으로 대기 상태로 기다린다. 파이프, 소켓 통신이 해당한다.
대기가 없는 통신: 동기화를 지원하지 않는 통신 방식이다. 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 계속해서 확인한다. 전역변수, 파이프 통신이 해당한다.

3. 실생활의 예를 들어 임계구역의 문제를 설명하시오.

임계구역 이란, 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역이다.

4. 다음 코드의 문제점을 설명하시오.

공유변수

boolean lock = false;

P1, P2

while(lock==true);
lock=true;
[임계구역]
lock=false;

만약 P1이 먼저 while문을 통과한 이후에 타임아웃으로 준비 상태에 옮겨지게 되고 이 때 P2가 실행된다면, 여전히 lock은 false인 상태기 때문에 마찬가지로 while문을 통과하게 되고, 결과적으로 P1이 다시 실행상태가 된다면 P1과 P2 모두 동시에 임계구역에 진입하게 된다. 이는 상호배제 조건을 보장하지 못한다.

5. 다음 코드의 문제점을 설명하시오.

공유변수

int lock=1;

P1

while(lock==2);
[임계구역]
lock=2;

P2

while(lock==1);
[임계구역]
lock=1;

만약 P2가 임계구역에 진입하고자 한다면, 필히 P1이 이미 임계구역에 진입하고 나온 뒤여야 한다. 반대의 경우도 마찬가지다. 이는 진행의 융통성을 보장하지 못한다.

6. 파일을 이용하여 Test라는 문자를 주고받는 코드를 작성하시오.

부모 프로세스와 자식 프로세스가 통신하는 경우

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

void main()
{
  int pid, fd;
  char buf[5];

  fd=open("com.txt", O_RDWR);
  pid=fork();

  if (pid < 0 || fd < 0)
    exit(-1);
  else if (pid == 0) {
    write(fd, "Test", 5);
    close(fd);
    exit(0);
  }
  else {
    wait(0);
    lseek(fd, 0, SEEK_SET);
    read(fd, buf, 5);
    printf("%s", buf);
    close(fd);
    exit(0);
  }
}




6장. 교착 상태

1. 교착 상태 해결 방법 중 프로세스가 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나, 그렇지 못할 경우 자원을 모두 반납하는 방법이 있다. 이 방법의 단점을 설명하시오.

첫 번째로, 프로세스는 자신이 사용해야 할 모든 자원을 초기부터 알기 어렵다. 만약 추가적인 자원을 필요로 할때 이를 확보하기 어려울 수 있다. 두 번째로, 자원의 낭비가 크다. 비록 잠시동안만 사용하거나, 사용하지 않을 수도 있는 자원조차도 모두 확보해서 점유하고 있기 때문에 자원의 낭비로 이어진다. 세 번째로, 많은 자원을 필요로 하는 프로세스의 경우 불리하다. 비교적 적은 자원만을 필요로 하는 프로세스들이 빠르게 자원들을 선점해간다면 모든 자원을 확보하기 어렵기 때문이다.

2. 교착 상태 회피 방법인 은행원 알고리즘의 단점을 설명하시오.

모든 프로세스가 자신이 사용해야 하는 자원을 미리 선언해야 하는데, 이는 쉬운 일이 아니다. 또한 은행원 알고리즘에서 안정 상태나 불안정 상태를 파악하려면 시스템의 전체 자원 수가 고정적이어야 하나, 실제로는 자원의 수가 유동적이다. 마지막으로 모든 불안정 상태가 교착 상태가 되는 것이 아님에도 자원을 할당하지 않아 자원의 낭비로 이어진다.

3. 교착 상태 검출 시 타임아웃을 이용하는 방법의 장단점을 설명하시오.

자원 할당 그래프에 비해 구현이 쉽다는 장점이 있다. 단점으로는 첫 번째로, 실제로 교착 상태에 빠지지 않은 프로세스를 종료할 수 있다. 타임아웃의 원인이 꼭 교착 상태만이 존재하는 것은 아니기 때문이다. 두 번째로, 모든 시스템에 적용하기 어렵다. 운영체제 내에서라면 적용하기 쉽지만, 분산 데이터베이스 등의 경우는 여러 원인이 있을 수 있어 실제로 타임아웃방식을 적용하기 어렵다.




7장. 물리 메모리 관리

1. 컴파일러와 인터프리터를 비교하여 설명하시오.

컴파일러는 먼저 코드를 기계어로 한번 번역하면서 오류를 체크하고 코드를 최적화 한 후 실행한다. 반면이 인터프리터는 소스코드를 한 행씩 읽어나가며 번역, 실행한다.

2. 컴파일 과정에 대해 설명하시오.

먼저 소스코드를 컴파일하여 목적 코드로 만든다. 두 번째로 라이브러리에 있는 코드를 목적 코드에 연결시킨다. 세 번째로 동적 라이브러리를 포함하여 실행한다.

3. 메모리 관리자가 수행하는 세 가지 작업에 대해 설명하시오.

가져오기 작업: 프로세스와 데이터를 메모리로 가져온다.
배치 작업: 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정한다.
재배치 작업: 새로운 프로세스를 가져오기 위해 기존 프로세스를 옮겨 놓거나 오래된 프로세스를 내보낸다.

4. 절대 주소와 상대 주소에 대해 설명하시오.

절대 주소: 메모리의 물리 주소 0번지부터 시작하여 현재 주소를 나타낸다.
상대 주소: 운영체제 영역을 제외한 사용자 영역의 시작을 0번지로 하여 현재 주소를 나타낸다.

5. 가변 분할 방식의 장단점을 설명하시오.

장점: 프로세스를 메모리의 연속된 공간에 적재할 수 있다. 단점: 외부 단편화문제가 나타날 수 있다.

6. 고정 분할 방식의 장단점을 설명하시오.

장점: 일정한 크기로 나누어 적재하므로 메모리 관리가 수월하다. 단점: 내부 단편화문제가 나타날 수 있다.

7. 버디 시스템에 대해 설명하시오.

가변 분할 방식이면서도 고정 분할 방식과 유사한 방식을 가진 시스템이다.
새로 들어오는 프로세스의 크기가 적당히 맞아 떨어질 때까지 메모리를 1/2로 잘라낸 뒤 배치한다.




8장. 가상 메모리의 기초

1. 가상 메모리가 이론적으로 가질 수 있는 크기와 실제 운영되는 크기는 어떤 차이가 있는지 설명하시오.

이론상으로 가상 메모리의 크기는 무한대이다. 하지만 실제로 가상메모리의 크기는 CPU의 비트에 따라 물리 메모리의 최대 크기로 한정된다.

2. 페이징 기법의 주소 변환 과정을 그림으로 그리고 설명하시오.

가상 주소 공간과 물리 주소 공간이 모두 10B로 나누어져 있다고 가정하자. 이 때 각각 한 페이지, 한 프레임은 10개의 주소를 가진다. 가상 주소에서의 35번지를 찾고자 한다면, 페이지 테이블의 페이지 3을 탐색하여 프레임값을 알아내고, 물리 주소의 해당 프레임의 5번 위치에 접근한다.

3. 연관 매핑의 동작을 설명하시오.

전체 페이지 테이블을 스왑 영역에 두고, 일부만 물리 메모리로 가져온다. 이를 변환 색인 버퍼 또는 연관 레지스터라고 한다. 만약 원하는 페이지 번호가 변환 색인 버퍼에 있을 경우 바로 물리 주소로 변환되고, 없을 경우 스왑 영역에 있는 테이블을 통해 변환한다. 전체 테이블 페이지를 물리 메모리에 올려두지 않아 메모리상의 이득이 있지만, 무작위로 올라온 변환 색인 버퍼를 모두 하나하나 검사한 이후에야 TLB 미스를 확인할 수 있기 때문에 비효율적이다.

4. 집합-연관 매핑의 동작을 설명하시오.

기존의 페이지 테이블을 여러 묶음으로 나누고, 각 묶음의 시작 주소를 가진 디렉터리 테이블을 새로 만들어 이를 관리한다. 전체 페이지 테이블은 스왑 영역에 있고 일부 묶음만 물리 메모리로 옮기며, 이렇듯 스왑 영역에 있는지 물리 메모리에 있는지를 표시하는 디렉터리 테이블을 만든다. 가상 주소를 VA = <P, D> 가 아니라, VA = <P1, P2, D>로 바꾸어 표시한다.

5. 역매핑의 동작을 설명하시오.

기존 테이블은 프로세스마다 페이지번호로 접근하여 프레임번호를 반환받을 수 있지만, 역매핑 테이블은 프레임을 기준으로 테이블을 설계하여 항상 실제 프레임 수와 테이블의 행 수가 같다. 프로세스의 아이디와 페이지 번호를 통해 물리 메모리에 있는지 검색한다. 테이블을 다 검색한 후에야 스왑영역에 접근한다는 단점이 있다.

6. 세그먼테이션-페이징 혼용 기법을 사용하는 이유를 설명하시오.

페이징 기법은 페이지 테이블의 크기가 크고, 세그먼테이션은 물리 메모리의 외부 단편화 문제를 가져온다. 두 테이블 모두 권한 비트를 필요로 하는데, 페이징 기법에 세그먼테이션 테이블을 추가하여 권한 비트의 중복을 막음으로써 메모리 관리를 효율적으로 할 수 있다.




9장. 가상 메모리 관리

1. 요구 페이징의 의미와 효과를 설명하시오.

요구 페이징은 사용자가 요구할 때 해당 페이지를 메모리로 가져오는 것을 말한다. 메모리의 절약, 메모리의 효율적 관리, 프로세스의 응답 속도 향상 등의 효과가 있다.

2. 세그먼테이션 오류와 페이지 부재의 차이를 설명하시오.

세그먼테이션 오류사용자 프로세스가 주어진 메모리 공간을 벗어나거나 접근 권한이 없는 곳에 접근하려 할 때 발생하며, 해당 프로세스를 강제 종료하여 해결한다. 반면 페이지 부재는 해당 페이지가 물리 메모리에 없을 때 발생하는 오류로, 사용자 프로세스와 무관하다. 페이지 부재가 발생하면 메모리 관리자는 스왑 영역에서 해당 페이지를 물리 메모리로 옮긴 후 작업을 계속한다.

3. 지역성의 의미를 설명하시오.

기억장치에 접근하는 패턴이 메모리 전체에 고루 분포되는 것이 아니라 특정 영역에 집중되는 성질을 말한다. 공간의 지역성, 시간의 지역성, 더해서는 순차적 지역성이 있다.

4. LRU 페이지 교체 알고리즘의 동작을 설명하시오.

Least Recently Used의 약자이다. 가장 오랫동안 참조되지 않은 페이지를 스왑 영역으로 옮긴다. 페이지 접근 시간에 기반하거나 카운터, 참조 비트등을 활용한다.

5. NUR 페이지 교체 알고리즘의 동작을 설명하시오.

Not Used Recently의 줄임말이다. 페이지의 수가 많을수록 더 많은 수의 비트를 사용해야 했던 LRU 페이지 교체 알고리즘과 달리, 참조 비트변경 비트 단 두개의 비트만을 사용한다. 물리 메모리에 올라와 있는 페이지에 대해 참조가 일어날 경우 참조 비트를, 수정이 일어날 경우 변경 비트를 0에서 1로 바꾸고, 만약 새로운 페이지가 스왑인 해야한다면 (0, 0), (0, 1), (1, 0), (1, 1)의 우선순위로 기존 페이지를 스왑아웃한다.

6. 프레임 할당 방식 중 정적 할당에 대해 설명하시오.

프로세스 실행 초기에 프레임을 나누어주고 고정하는 방식이다. 균등 할당비례 할당이 있다. 균등 할당의 경우 사용 가능한 프레임을 모든 프로세스에게 똑같이 나누어준다. 반면 비례 할당의 경우 사용 가능한 프레임을 프로세스의 크기에 비례하여 나누어준다.

7. 프레임 할당 방식 중 동적 할당에 대해 설명하시오.

프로세스의 상태 변화에 따라 프레임 배분을 달리하는 방식이다. 작업집합 모델페이지 부재 빈도가 있다. 작업집합 모델은 지역성 이론을 바탕으로, 최근 일정 시간 동안 참조된 페이지들을 집합으로 만들고, 이 집합에 있는 페이지들을 물리 메모리에 유지한다. 페이지 부재 진도는 페이지 부재가 너무 많은 프로세스에게 프레임을 추가로 할당해주고, 페이지 부재가 너무 적은 프로세스에게는 프레임을 회수하여 적정 페이지 할당량을 조절한다.




10장. 입출력 시스템과 저장장치

1. 입출력 버스의 구조를 그림으로 그리고 설명하시오.

메인버스를 통해서 CPU와 메모리와 입출력 제어기가, 그래픽 버스를 통해서 CPU와 그래픽카드가, 고속 입출력 버스저속 입출력 버스를 통해서 입출력제어기와 주변장치가 통신한다.

2. 인터럽트의 종류를 나열하고 설명하시오.

외부 인터럽트: 입출력 및 하드웨어와 관련된 인터럽트이다.
내부 인터럽트: 프로세스의 오류로 발생하는 인터럽트이다.
시그널: 사용자 요청으로 발생하는 인터럽트이다.

3. 각속도 일정 방식과 선속도 일정 방식에 대해 설명하시오.

각속도 일정 방식: 하드디스크의 플러터는 항상 똑같은 속도로 회전하기 때문에, 바깥쪽 트랙이 안쪽 트랙보다 속도가 더 빠르다. 따라서 바깥쪽 섹터가 안쪽 섹터보다 더 크다.
선속도 일정 방식: 어느 트랙에서나 단위 시간당 디스크의 이동 시간이 같다. 즉 헤드가 안쪽 트랙에 있을 때에는 속도를 빠르게 하고 바깥 트랙에 있을 때에는 속도를 느리게 한다.

4. SSTF 디스크 스케줄링의 장단점을 설명하시오.

SSTF 디스크 스케줄링은 현재 헤드가 있는 위치에서 가장 가까운 트랙부터 서비스한다. 가까운 곳부터 서비스하기때문에 이동시간상의 이득을 볼 수 있지만, 가장 안쪽이나 바깥쪽의 트랙은 서비스 받을 확률이 낮아지는 아사현상이 일어날 수 있다.

5. LOOK 디스크 스케줄링이 만들어진 이유를 설명하시오.

SCAN 디스크 스케줄링의 경우 항상 가장 안쪽 트랙과 가장 바깥쪽 트랙을 오가는데, 이는 서비스할 필요가 없는 트랙들까지 지나다니게 된다. 이런 비효율을 줄이고자 더 이상 서비스할 트랙이 없다면 바로 방향을 바꾸는 LOOK 디스크 스케줄링이 만들어졌다.

6. C-SCAN 디스크 스케줄링에 대해 설명하시오.

SCAN 디스크 스케줄링의 경우 항상 가장 안쪽 트랙과 가장 바깥쪽 트랙을 오가는데, 중간 트랙에 비해 안쪽과 바깥쪽은 방문 횟수가 적어진다. 따라서 공평한 기회를 부여하고자 한 방향으로만 트랙을 읽어나가는 C-SCAN 디스크 스케줄링이 등장했다. 하지만 트랙을 읽지않고 지나가는 시간이 너무 많아 효율적이지 못하다.

7. RAID 10과 RAID 0+1을 비교하여 설명하시오.

RAID 10은 먼저 미러링기능을 담당하는 RAID 1을 구성한 후, 이를 나열하여 RAID 0을 구성한다. 반면 RAID 0 + 1은 먼저 데이터 분산을 담당하는 RAID 0을 구성한 후, 이를 두개 합쳐 RAID 1을 구성한다. 만약 자료의 손실로 백업이 필요한 경우 RAID 10은 해당하는 RAID 1만을 중지시킨 후 백업작업을 진행하면 되는데에 비해 RAID 0 + 1은 두개의 RAID 0에 각각 같은 데이터가 존재하기 때문에 전체를 중지시키고 백업작업을 진행해야 한다. 따라서 RAID 10이 더 선호된다.




11장. 파일 시스템

1. 순차 파일 구조에 대해 설명하시오.

파일 내용이 하나의 긴 줄로 늘어선 형태이다. 모든 데이터가 순서대로 기록되며, 마찬가지로 순서대로 데이터를 읽거나 저장할 때 매우 빠르게 처리된다. 하지만 중간에 새로운 데이터를 삽입하거나 삭제할 때 많은 시간이 소요되고, 항상 앞에서부터 순서대로 움직여 데이터에 접근해야 하므로 데이터 검색에 용이하지 않다.

2. 인덱스 파일 구조에 대해 설명하시오.

인덱스 테이블을 통해 직접 접근이 가능해진다. 현대의 파일 시스템으로, 파일을 저장할 때는 순차 파일 구조로 저장하고 파일에 접근할 때는 인덱스 테이블을 보고 원하는 파일에 직접 접근한다. 인덱스 테이블을 여러개 만든다면 여러가지 방식으로 파일에 접근이 가능하다.

3. 직접 파일 구조에 대해 설명하시오.

저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 바로 변환하는 파일 구조이다. 해시 함수를 사용한다. 데이터 접근이 매우 빠르지만, 해시함수의 선정이 매우 중요하며 때때로 특정 주소에만 데이터가 쏠리는 현상이 일어날 수 있다.

4. 경로의 의미와 종류를 설명하시오.

디렉토리 중 파일이 어디 있는지 나타내는 정보이다. 루트 디렉토리를 기준으로 하는 절대 경로와 현재 디렉토리를 기준으로 하는 상대 경로가 있다.

5. 디스크할당 방식의 연속 할당과 불연속 할당에 대해 설명하시오.

연속 할당: 디스크상에 파일의 데이터가 연속적으로 배열되는 방식이다. 시작 블록만 알면 파일전체를 바로 접근할 수 있지만, 연속된 공간이 부족해지는 문제로 사용되지 않는다.
불연속 할당: 비어있는 블록에 데이터를 분산하여 저장하고 이에 대한 정보를 파일 시스템이 관리하는 방식이다. 연결 리스트를 이용한 연결 할당과 인덱스를 이용한 인덱스 할당이 있다.

6. 디스크의 빈 공간 관리 방법을 설명하시오.

파일을 저장하려 할 때마다 새로운 빈 공간을 찾는 것은 낭비이기 때문에 빈 공간 리스트를 따로 가지고 있는다. 특정 파일을 삭제한다면 빈 공간 리스트에 해당 파일이 점유하고 있던 블록을 추가한다. 단 실제 파일은 지워지지 않으며 추후 해당 블록을 사용하려 할 때 덮어씌워진다.

Tags: ,

Categories:

Updated:

Leave a comment