본문 바로가기
학부공부/OS_운영체제

PE1. Practice Exercises_2.1~2.8_Text book 101p

by sonpang 2022. 7. 10.
반응형

OS_운영체제 카테고리의 PE Series는 

2021.10.20 - [학부공부/OS_운영체제] - 00. 운영체제 STUDY 시작

 

00. 운영체제 STUDY 시작

안녕하세요! 제가 티스토리 페이지를 만든 후 처음으로 작성하는 글입니다... 복학하기 전 개인적인 공부를 정리하자는 취지로 시작하는 글이라 가독성이 떨어지고 부족한 부분이 있을 수 있으

ku320121.tistory.com

포스팅에서 소개한 text book의 연습문제를 풀이한 것을 정리한 것입니다. 해설을 참고하지 않았기 때문에 풀이에 오류가 있을 수 있습니다. 또한 운영체제 교과목 내용을 벗어나는 내용과 사견이 풀이에 포함되어 있을 수 있습니다.

 

 

2.1 What is the purpose of system calls?

System call은 user mode에서 kernel mode로 진입하기 위한 통로이자 kernel service를 요청하는 것이다.

 

Multiprogramming 환경 등에서 switching을 할 때 이를 cooperative한 방식을 사용하여 user가 담당하게 된다면 resources(CPU...)를 독점하려 하는 user가 존재할 수 있다. 즉 process를 신뢰할 수 있어야 하는 전제가 필요하다. 하지만 다양한 프로그램들을 구동하는 system에서 모든 program의 신뢰성을 담보하기 어렵다. 따라서 OS가 interrupt를 발생시켜 resources의 control을 가져와야 한다. OS에서 CPU 실행 mode를 kernel mode와 user mode로 구분하고 HW 접근을 제어하게 된다. 즉, CPU의 execution mode와 application의 execution mode를 이원화한 것이다. 여기서 user mode에서 kernel mode로 진입하여 kernel service(process control, file manipulation, device management, communication, protection 등)를 요청하는 것이 system call이다.

 

 

 

2.2 What is the purpose of the command interpreter? Why is it usually separate from the kernel?

User가 직접 명령어를 입력하여 OS에 접근할 수 있도록 한다. 즉, User와 computer간 communication을 위해 사용하는 번역기이다.

 

Kernel은 memory에 load되어 system off되기 전까지 memory에 올라와 있다. 만약 command interpreter가 kernel에 포함된다면 무거운 kernel이 되기 때문에 포함하지 않는다. Command interpreter의 모든 부분이 항상 memory에 load되어 있어야 되는 것이 아니기 때문이다. 만약 command interpreter가 불필요하게 memory를 차지한다면 실제로 동작해야 할 process에서 page fault가 더 빈번하게 발생하게 한다. Page fault가 발생하면 disk에서 memory로 data를 불러와야하기 때문에 critical path delay로 작용해 response time 등에서 불리한 system이 된다.

 

 

 

2.3 What system calls have to be executed by a command interpreter or shell in order to start a new process on a UNIX system?

UNIX system에서 새로운 process를 시작하기 위해 executed되어야 할 system call은 fork()와 exec()이다.

 

fork()는 새로운 process를 만드는 system call이고 exec()은 fork()로 할당된 memory에 user가 실행하고자 하는 process를 load하는 system call이다.

 

 

 

2.4 What is the purpose of system programs?

User program에게 편리성을 지원하기 위해 OS가 제공하는 system call의 집합이다.

 

Kernel은 memory에 load되어 system off되기 전까지 memory에 올라와 있다. Exercise 2.2의 답변과 동일한 논리로 memory에 항상 load되어 있을 필요가 없지만 file manipulation, communications, programming language support(garbage collector도 이러한 사례가 될 수 있다고 생각합니다.) 등 다수의 프로그램들이 일반적으로 사용하는 공통된 기능을 지원하기 위해 system call의 set으로 system program을 만들어 OS에서 제공한다.

 

 

 

2.5 What is the main advantage of the layered approach to system design? What are the disadvantages of the layered approach?

Layering의 가장 큰 장점은 설계의 복잡도를 낮출 수 있다는 것이다. 즉, 접하고 있는 layer들의 syntax와 semantics만 맞춘다면 layer사이에 새로운 layer를 추가하거나 layer를 변경할 수 있다는 점에서 유지보수가 유리하다. 또한, module간 접점이 arbitrary한 modular design에 비해 attack surface가 줄어들어 security 측면에서도 유리하다.

 

다만 접하고 있는 layer끼리만 communication이 가능하기 때문에 layering은 module간 communication이 가능한 modular design에 비해 overhead가 크다. 즉, 불필요한 layer를 거치게 된다면 이는 overhead다. 물론 layer간 direct connection case를 만들 수 있지만 그렇게 구성한다면 설계하면서 세운 layering principle을 위배하게 된다.

 

 

 

2.6 List five services provided by an operating system, and explain how each creates convenience for users. In which cases would it be impossible for user-level programs to provide these services? Explain your answer.

File management, status information, program loading and execution, communications, Protection 등을 지원한다. 이러한 service는 결국 HW를 효율적으로 사용할 수 있는 abstraction을 제공하고 resources allocation을 위한 policy를 제공하는데 이용된다.

 

User-level program이 위에서 나열한 service를 제공할 수 없다는 것을 설명한다면 결국 각 service가 user에게 어떻게 편의를 제공하는지 설명하는 것으로 이어지기 때문에 user-level program이 해당 service들을 제공할 수 없다는 것에 초점을 맞추어 설명하겠습니다. 공유 resources의 경우 신뢰할 수 없는 user program에게는 관련 권한을 부여할 수 없기 때문에 user program은 file management service를 제공할 수 없다. User program이 스스로 적절하게 CPU clock을 배분하지 않을 수 있기 때문에 user program은 status information과 program loading and execution service를 제공할 수 없다. User program에게 여러 I/O장치 access 권한을 줄 수 없기 때문에 user program은 communications service를 제공할 수 없다. 계정들의 정보 보호를 위해 user program은 protection service를 제공할 수 없다.

 

 

 

2.7 Why do some systems store the operating system in firmware, while others store it on disk?

가벼운 OS를 탑재하는 system의 경우 firmware로 ROM에 저장하는 것이 disk에 저장하는 것보다 유리하다. 또한 disk의 size가 너무 작아 kernel code까지 disk에 저장하는 것이 불가능하거나 hierarchical bus 구조에서 disk를 연결하는 bus의 속도가 느리다면 ROM에 저장하는 것이 booting 속도 측면에서 유리할 수 있다.

 

 

 

2.8 How could a system be designed to allow a choice of operating systems from which to boot? What would the bootstrap program need to do?

Boot manager가 OS 선택을 지원할 수 있다. 이때 ROM에 위치한 bootstrap program에는 disk(HDD)의 kernel code를 memory에 정해진 공간으로 옮기는 bootstrap loader가 있다. 여기서 boot manager가 다른 bootstrap loader를 선택한다면 결국 memory에 load하는 kernel code를 선택할 수 있다는 것이다. 즉, bootstrap program은 user의 선택에 따라 다른 bootstrap loader를 실행하여 OS 선택을 지원한다.

 

반응형

댓글