과목명 : 운영체제(Operating System)
수업일자 : 2023년 03월 22일 (수)
1. Segment
1-1. Segment의 정의
- 세그먼트(Segment)는 사전적인 의미로 "부분"이라는 뜻을 가지고 있습니다 컴퓨터 과학에서의 세그먼트는 메모리의 한 부분(최대 64 KB)을 의미하며 이에 따라 Offset은 해당 세그먼트의 상대적 주소를 의미합니다.
1-2. Memory
(1) Physical memory(main memory)
(2) Virtual memory(가상 메모리)
- Multitasking을 지원하기 위해 개발된 메모리 관리 기법입니다.
- 모든 프로세스는 자신만의 가상 메모리를 보유하고 있습니다.
1-3. Address
(1) Physical address(물리적 주소)
(2) Logical address(논리적 주소)
- 논리적 주소의 경우, 실행되고 있는 프로세스의 관점에서 참조하는 주소를 의미합니다.
1-4. x86 address
(1) Logical address = segment address + offset
- Real mode에서 동작합니다.
(2) Linear address = segment address * (0x10) + offset (Real mode에서 동작합니다.)
- Physical address for 8086
- Virtual memory for 80386 PM (Protected mode에서 동작합니다.)
(3) Physical address
- Linear address → MMU (Paging ...) → Physical address
- Real mode에서 동작합니다.
2. Logical to Linear address translation
2-1. Example 1)
(1) CS = 0x0010
(2) IP = 0x1234
(3) Logical address = CS : IP (항상 짝을 이루는 구조)
- Logical address = base address + offset
(4) Linear address = 0x00100 + 0x1234 = 0x01344
2-2. Example 2)
(1) DS = 0x0020
(2) SI = 0x1234
(3) Logical address
(4) Linear address
2-3. Example 3)
(1) SS = 0x0020
(2) SP = 0x1234
3. 80386 CPU
3-1. 32-Bit CPU
(1) Multitasking을 지원하기 위한 기능이 내부적으로 구현되어 있습니다.
- Task switching을 위한 명령
- 보호(Protection) 기능
- 가상 메모리(Virtual memory)를 지원하기 위한 Registers
3-2. Running modes
(1) Real mode
(2) Protected mode
(3) Virtual 8086 mode
3-3. Protected mode
(1) 80286에서는 16-bit 보호 모드 기능이 지원되었습니다.
(2) CRO register의 LSB를 set하게 되면 Real mode에서 Protected mode로 동작이 변경됩니다.
(3) 멀티태스킹(Multitasking) 지원
4. Running modes(Real mode, Protected mode)
4-1. Real mode (하위 호환성을 위한 모드)
(1) Power on 상태가 되면 Real mode로 동작하게 됩니다.
(2) 8086으로 동작하지만 내부의 32-Bit register를 사용할 수 있습니다.
- 최대로 사용할 수 있는 메모리 용량은 1 MB입니다.
(3) 멀티태스킹(Multitasking)을 지원하지 않습니다.
- 한 번에 하나의 프로그램만 수행됩니다. (Only one process is active at a time.)
(4) Protection 기능이 존재하지 않습니다.
- 따라서 프로그램은 메모리의 모든 영역에 Write 할 수 있고 그 결과로 운영체제의 코드를 마음대로 변경할 수 있습니다. (악의적인 목적을 갖는 프로그램 작성이 가능)
4-2. Protected mode
- 최근 사용하는 운영체제의 대부분이 사용하는 모드입니다.
- 보호 모드라고 불리는 이유는 각 프로세스마다 가상 메모리 영역이 할당되어 다른 프로세스의 접근을 제한하여 해당 프로세스의 데이터를 보호하며 응용 프로그램이 시스템 영역(커널 영역)에 쉽게 접근하여 시스템의 요소를 손상시킬 수 있는 부분을 제한해 주기 때문입니다.
(1) Support up to 64G of physical memory (물리적 메모리 지원)
(2) 멀티태스킹을 지원합니다. (Support multitasking)
(3) Protection 기능이 CPU에 의해 지원됩니다.
(4) 다른 응용 프로그램에 의해 어떤 응용 프로그램이 강제로 변경되는 것을 보호할 수 있습니다.
5. Registers in 80386
- Protected mode에서는 System level registers 영역도 사용이 가능합니다.
- 운영체제 레벨에서 운영되는 레지스터입니다.
(1) General purpose registers
(2) Segment Register
- 16 bits
- Real mode에서는 segment register로 동작하고, Protected mode에서는 Selector로 동작하게 됩니다.
(3) EFLAGS(Flag register)
(4) EIP(Instruction Pointer)
(5) Control Registers
(6) Descriptor Table Registers
- GDTR(Global Descriptor Table Register)
- LDTR(Local Descriptor Table Register)
- IDTR(Interrupt Descriptor Table Register)
(7) TR(Task Register)
(8) Test Registers
(9) Debug Registers
(10) Model Specific Registers(MSR)
6. Control Registers
6-1. CR0 register
(1) PE Bit(LSB)를 Set 하면, 동작 모드가 Real mode에서 Protected mode로 변경됩니다.
6-2. CR2 register
(1) *Page fault가 발생한 주소의 정보를 저장합니다.
* Page fault
- 프로그램이 자신의 주소 공간에는 존재하지만 시스템의 RAM에는 현재 없는 데이터나 코드에 접근을 시도하였을 경우 발생하는 현상을 의미합니다.
6-3. CR3 register
(1) PDB(Page Directory Base) 주소를 저장하고 있습니다.
(2) PDBR(Page Directory Base Register)
6-4. CR4 register
(1) 가상 주소(Virtual address)를 물리 주소(Physical address)로 변환하는 과정에서 사용되는 정보를 저장하고 있습니다.
- Physical Address Extensions (PAE)
- Page Size Extensions (PSE)
7. Descriptor Table
7-1. Descriptor table
(1) Memory의 특정 영역(Segment)에 대해 정보를 저장하고 있는 테이블을 의미하며, 프로세스가 생성되면 프로세스에 대한 정보들이 저장되며 저장되는 내용은 다음과 같습니다.
- Segment의 기본 주소(base address)
- Segment의 크기
- DPL (Descriptor Privilege Level)
- Descriptor Type : System, application
- Segment Type : Code, Data, Stack, Gate, TSS
7-2. 선형 주소(Linear address)
(1) Selector register (Real mode인 경우 physical address, Protected mode인 경우 virtual address)
- Protected mode에서 segment register는 DT의 특정 엔트리를 지정하는 역할로 변경됩니다.
(2) Offset address
7-3. DTR(DT Register)
(1) DT은 운영체제가 초기화하는 과정에서 생성되고, 그 위치를 DTR에서 저장하고 있습니다.
8. Addresses
8-1. Physical address (물리적 주소)
(1) 실제 메모리 공간의 주소이며 Address bus로 전달되는 주소입니다.
8-2. Logical address (논리적 주소)
(1) 프로그램의 코드에서 사용하는 가상적인 주소이고 메인 메모리와 연관은 없습니다.
(2) x86의 논리적 주소는 아래와 같이 2가지로 분류됩니다.
- 프로그램의 논리적인 부분을 지정하는데 사용되는 Segment number.
- Segment 시작에 대한 상대적인 위치를 지정하는데 사용되는 offset number.
8-3. Address translation
(1) LA는 실행 시 PA로 변환됩니다.
(2) x86의 경우 동작 모드(Running mode)에 따라 다르게 변환됩니다.
9. Address translation
9-1. Address translation
- Virtual address에서 Physical address으로 Mapping이 진행되어야 합니다.
- MMU(Memory Management Unit)에 의해 Virtual address에서 실제 Physical address로 변환됩니다.
9-2. Virtual Adresss(VA)에서 Physical Address(PA)로 Mapping하는 과정
(1) 프로그램마다 운영체제에 의해 가상 메모리 공간이 생성됩니다. (Virtual address 생성)
- 해당 영역에서 프로세스의 동작이 발생합니다.
(2) 하지만 이 부분은 실제 메인 메모리와 연관이 있지 않으며 운영체제에 의해 만들어진 가상의 공간이기 때문에 실제 물리적 메모리 내부에 프로세스에 대한 실체가 존재합니다.
10. Address translation in protected mode
10-1. LA = (Segment, offset)
- Segment register의 segment number의 경우 Descriptor table의 엔트리를 지정(또는 인덱싱)하는데 사용됩니다.
- 따라서 Segment register를 selector라고 부르기도 합니다.
- 지정된 엔트리에는 참조된 Segment의 기본 주소와 길이가 포함됩니다.
10-2. 선형 주소(Linear address) = 기본 주소(Base address) + Offset
- 가상 주소(Virtual memory)
- P1은 두 번째 Page table의 기본 주소를 얻기 위해 PDBR이 가리키는 Directory page table(메모리 내부)의 엔트리를 인덱싱합니다.
- P2는 참조 대상의 물리적 주소를 제공하는 두 번째 Page table의 엔트리를 인덱싱합니다.
11. Address translation in x86
11-1. Flat Memory Model (FMM)
(1) 각 segment descriptor의 기본 주소가 동일한 경우, Segmentation 부분은 소프트웨어 설계자에 의해 숨겨질 수 있습니다.
- 그 다음 각 selector는 동일한 sement를 가리킵니다. (코드, 데이터 및 스택이 동일한 segment를 공유하도록 함.)
- 각 descriptor의 보호 비트(읽기 전용, 읽기-쓰기)는 계속 사용할 수 있습니다.
(2) 가상 주소의 offset 부분은 선형 주소(P1, P2, D)와 동일합니다.
- 선형 주소(P1, P2, D) = offset
- 가상 주소의 offset 부분만 참조된 단어의 위치를 지정하는데 사용됩니다.
- 주소 공간을 FLAT이라고 합니다.
11-2. Windows와 linux는 FMM을 사용합니다.
- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
댓글