-
XV6 - 이론 정리_1CS/OS 2022. 5. 13. 18:03
앞서 배운 OS 내용을 바탕으로 실제 MIT 교육용 코드에서 어떻게 동작하는지 알아보겠습니다.
XV6 라는 OS를 가져와서 사용하였습니다.
OS 중요 요소는 Time-sharing / Isolation / Interaction으로 나눌 수 있는데, Time-sharing은 하나의 Program이 독점하는 것을 막기 위해, Isolation은 사용자에게 모든 권한을 주지 않으며, Kernel 영역에서만 Resource를 접근하기 위함이라고 설명하였다. 그렇다면, Interaction은 어떻게 이루어질까?
Unix System에서는 Process간에 file descriptor를 통하여 Interaction이 발생한다. File Descriptor가 존재함으로써, Kernel이 예외 사항을 처리 할 수 있다.
들어가기 앞써, 구현되어 있는 코드의 흐름이 이해가 되지 않아, 정리해보았습니다.
아래 내용은 틀린 내용이 있을 수 있습니다.
Proc Structure ( PCB )
proc.h 내부 코드를 보면 Process에 대한 정보가 담겨있다. 우리가 흔히 알고 있는 PCB라 불리는 내용이다.
하나의 프로세스는 User stack 과 Kernel stack 이 존재한다. Process가 User mode로 동작하고 있다면, User stack만 사용한며 kernel stack은 빈값이 된다. 반대로 Kernel mode가 된다면 user stack , kernel stack 둘다 사용된다.
좀 더 자세히 말하면 프로세스가 user instruction을 실행하다가 H/W 자원을 필요로 하면 systemcall을 호출한다. 그러면 사용하는 스택을 kernel stack으로 전환하고 privilege level을 올린다. 그리고 kernel instruction을 사용하여 systemcall로 지정된 작업을 한다. 해당 작업을 완료하게 되면 privilege level을 다시 내리고 user stack으로 전환 후 user instruction을 다시 실행한다.
xv6(Unix operating system)에서 isolation의 단위는 프로세스이다. 커널은 user/kernel mode, address space, time-slicing of thread를 통해 isolation을 지원한다.
커널은 프로세스가 자신만의 machine이 있다고 착각하게 한다. 커널은 프로세스에게 다른 프로세스가 읽거나 쓸 수 없는 private memory system을 제공하는데 이를 address space라고 한다. 또한 프로세스가 자신만의 cpu를 갖고 실행되는 것처럼 보이게 한다.
xv6는 page table이라는 개념을 통해 각각의 프로세스가 자신만의 address space를 갖도록 한다. page table은 virtual address를 physical address로 변환한다. xv6에서 각각의 프로세스는 자신의 address space를 정의하는 page table을 갖는다.
아래 그림과 같이 프로세스는 자신만의 address space를 갖으며 address space는 physical memory에 page table을 통해 mapping 된다. 이때 kernel area(OS영역)는 모든 프로세스에서 공통으로 사용한다. 이유는 커널 코드와 커널의 데이터는 모든 프로세스에서 같이 사용하기 때문에 물리메모리를 절약과 편이성을 위해서이다.
user area는 virtual memory 0번지에서 시작하여 0x80000000 까지다. code, data, stack, heap이 순서대로 구성된다. 메모리를 가변적으로 사용하기 위해 heap은 0x80000000에서 아래방향으로 자란다. 그래야 stack과 heap의 크기를 가변적으로 늘였다 줄였다 할 수 있다. kernel area는 0x801000번지에서 높은 주소방향으로 자란다. BIOS 영역은 OS영역으로 Kernel이다. 위 그림에서는 user area가 연속되게 physical memory에 mapping되도록 표현되었다. 이는 그림상의 편이를 위한거고 실제로는 page 단위(4KB)로 메핑되어 있다.
'CS > OS' 카테고리의 다른 글
5. Process_Scheduling (0) 2022.05.19 XV6 - 이론 정리_2 (0) 2022.05.13 3. Dual Mode / System Call / OS Service (0) 2022.05.11 2.OS 역사 (0) 2022.05.06 1. 운영체제(OS)란? (0) 2022.05.06