xv6-book

xv6-book (Ch1-Operating system interfaces)

White_Bean 2024. 1. 29. 22:42

xv6 시스템 프로그래밍을 하기 전에
6.S081 / Fall 2020 (mit.edu) 에서 제공하는 xv6-book 에 대한 내용을 정리하여 기초 os 지식을 습득하는 과정입니다.

자세한 xv6 book 내용은 xv6: a simple, Unix-like teaching operating system (mit.edu) 여기서 보실 수 있습니다. 

제가 정리하는 내용은 자세한 내용이 아닌 내용을 간추리는 것이기에 위의 책을 보시며 이해하는 것을 추천드립니다.

Chapter 1

Operating system interfaces

운영 체제는 컴퓨터를 여러 프로그램 사이에서 공유하고 하드웨어만으로 지원하는 것보다 더 유용한 서비스를 제공 합니다. 또한, 낮은 수준의 하드웨어를 관리하고 추상화합니다. 예를 들어, 워드 프로세서가 어떤 종류의 하드웨어 디스크를 사용하는지에 대해 걱정할 필요가 없도록 합니다.

운영 체제는 하드웨어를 여러 프로그램 사이에서 공유하여 그들이 동시에 실행되거나 실행되는 것처럼 보이도록 하며, 프로그램이 데이터를 공유하거나 함께 작업할 수 있도록 제어된 방법을 제공합니다.

 

운영 체제는 인터페이스를 통해 사용자 프로그램에 서비스를 제공합니다.

한편으로는 인터페이스를 간단하고 한정된 범위로 유지하고 싶은데, 그 이유는 구현을 올바르게 하는 것이 더 쉬워지기 때문입니다. 다른 한편으로는 응용 프로그램에 다양한 고급 기능을 제공하는 것에 유혹을 느낄 수 있습니다.

이 긴장을 해소하는 데 있어 핵심은 많은 일반성을 제공하기 위해 결합될 수 있는 몇 가지 메커니즘에 의존하는 인터페이스를 설계하는 것입니다. 

 

이 책은 운영 체제 개념을 설명하기 위해 구체적인 예시로 단일 운영 체제를 사용합니다.

xv6는 Ken Thompson과 Dennis Ritchie의 Unix 운영 체제에서 소개된 기본적인 인터페이스를 제공하며, Unix의 내부 설계를 모방합니다. 유닉스는 잘 결합되어 다양한 일반성을 제공하는 좁은 인터페이스를 제공합니다.

이 인터페이스는 너무 성공적이어서 현대 운영 체제인 BSD, Linux, Mac OS X, Solaris, 그리고 더 적은 정도로는 Microsoft Windows도 Unix와 유사한 인터페이스를 가지고 있습니다.

 

xv6는 커널의 전통적인 형태를 취합니다. 커널은 실행 중인 프로그램에 서비스를 제공하는 특수한 프로그램입니다.

각 실행 중인 프로그램은 프로세스라고 불리며, 명령어, 데이터, 그리고 스택을 포함한 메모리를 가지고 있습니다.

명령어는 프로그램의 계산을 실행합니다. 데이터는 계산에 의해 조작되는 변수들입니다.

스택은 프로그램의 프로시저 호출을 구성합니다. 일반적으로 하나의 컴퓨터에는 많은 프로세스가 있지만 하나의 커널만 있습니다.

 

 

 

프로세스가 커널 서비스를 호출해야 할 때, system call 을 호출합니다. 이는 운영 체제 인터페이스 내의 호출 중 하나입니다. 시스템 호출은 커널로 진입하고, 커널이 서비스를 수행한 후 반환합니다. 프로세스는 사용자 공간과 커널 공간을 번갈아가며 실행합니다.

 

커널은 CPU가 제공하는 하드웨어 보호 메커니즘을 사용하여 사용자 공간에서 실행되는 각 프로세스가 자신의 메모리에만 접근할 수 있도록 보장합니다. 커널은 이러한 보호를 구현하는 데 필요한 하드웨어 권한으로 실행됩니다. 사용자 프로그램은 그러한 권한 없이 실행됩니다. 사용자 프로그램이 시스템 호출을 호출하면, 하드웨어가 권한 수준을 높이고 커널 내에서 미리 정해진 함수를 실행하기 시작합니다.

 

커널이 제공하는 시스템 호출의 모음은 사용자 프로그램이 볼 수 있는 인터페이스입니다. xv6 커널은 전통적으로 유닉스 커널이 제공하는 서비스와 시스템 호출의 일부만 제공합니다. 셸은 사용자로부터 명령을 읽고 실행하는 일반적인 프로그램입니다. 셸이 커널의 일부가 아닌 사용자 프로그램이라는 사실은 시스템 호출 인터페이스의 강점을 보여줍니다: 셸에는 특별한 점이 없습니다. 또한, 이것은 셸을 쉽게 대체할 수 있다는 것을 의미합니다. 따라서 현대의 유닉스 시스템에는 각각 자체의 사용자 인터페이스와 스크립팅 기능을 가진 다양한 셸이 있습니다. xv6 셸은 Unix Bourne 셸의 본질을 단순하게 구현한 것입니다.

 

 

더보기

among : ~사이에 ( Among과 between은 모두 무엇인가의 그룹 안에서 무엇인가를 가리키는 데 사용될 수 있습니다.)

abstract : 추상적인

interact : Interact는 두 가지 이상의 개체나 사람이 서로 작용하거나 소통하는 것을 의미

On the one hand : 한편으로는

implementation : 구현

tempted : 유혹하다

sophisticated features : 고급 기능

much generality : 많은 일반성

be combined : 결합되다

illustrate : 설명하다

concreate example : 구체적인 예시

mimick : 흉내내다

typically : 일반적으로

performs : 수행하다

alternates : 번갈아가며 하다, 교대로 하다

privileges required : 필요한 권한

pre-arranged : 미리 준비된