"만들면서 배우는 OS 커널의 구조와 원리/김범준 저" 책이 집에 있어서 보고 있는데
오늘 공부하면서 아리송했던 내용들이 이해하기 쉽게 써져있네요.
참고하시면 좋을듯합니다.
간략하게 정리하자면...
1. Real Mode와 Protected Mode
- Real Mode란 컴퓨터에 전원이 들어온 후 CPU가 처음 움직이기 시작하면서 활동하는 모드이다. 예전의 MS-DOS의 시스템같은... 현재는 거의 사용하지 않고있음.
- 그런데 Real Mode를 아직까지 사용하고 있는 이유는 예전에 사용되던 8086 CPU용의 DOS 프로그램을 현재에도 사용할 수 있도록 하는 호환성 문제 때문이다. 486을 사용하든지 Pentium을 사용하든지 Real Mode로 동작하고 있을때에는 CPU가 모두 하드웨어적으로 8086이 되어 있다고 생가하고 프로그램을 작성해야 한다.
- 따라서 모든 커널은 컴퓨터의 전원이 들어온 후 리얼모드에서 여러가지 하드웨어적인 세팅을 마친후 Protected Mode로 CPU를 전환한다.
2. 세그먼트와 오프셋
- 일반적으로 0x07C00번지는 0x07C0:0000, 0x0000:7C00, 0x0700:0C00 등 많은 방법으로 표현할 수 있습니다. 여기서 0x07C00번지를 물리주소라고 부르고, 0x07C0:0000등을 논리주소라도 합니다.
- 변환시킬때에는 세그먼트에 있는 값에 16을 곱하여 오프셋을 더한다.
예) 0x07C0:000 이라하면..
0X7C00 + 0x000 = 0x7C00 = 0x07C00
- 위에서 설명한 것은 Real Mode에서의 주소지정방식입니다.
- 즉, 우리가 웹페이지로 봐왔던 부분은 인텔 CPU가 Real Mode에서 주소를 지정하는 방식에 대해서 확인을 한것이고, Protected Mode에서는 리눅스는 리눅스 나름대로 윈도우는 윈도우 나름대로의 주소지정 방식을 사용한다는 내용인것 같네요.
3. GDT (Global Descriptor Table)
- Protected Mode에서 주소지정을 하기 위해서는 Real Mode -> Protected Mode로 전환하기 전에 미리 하나의 테이블(GDT)을 준비해야 합니다. 이 테이블은 어떤 형식이 있는 데이터의 나열이고, RAM영역 중 어디든지 기입해 놓을 수 있습니다.
이렇게 기입해 놓은 테이블은 Protected Mode로 변환 후 컴퓨터의 전원이 내려질때까지 그 자리에 있어야 합니다.
이 테이블에는 각 세그먼트 영역에 대해 이것들을 어떻게 사용할 것인지에 대해 설명해 놓습니다. 이것은 "커널이 이제부터 메모리를 어떻게 사용하겠다"라고 하는 설계서와 흡사한 것입니다.
4. IDT (Interrupt Descriptor Table)
- Protected Mode에서 인터럽트를 구현하기 위해서는 테이블이 하나 필요한데 이 테이블이 IDT라고 합니다.
- IDT도 GDT와 마찬가지로 RAM상에 저장되며, 메모리 중 어느 곳에라도 저장이 가능합니다. 이 테이블은 256개의 GDT의 디스크립터와 비슷하게 생긴 디스크립터로 구성되어 있습니다.
- GDT의 디스크립터는 메모리의 세그먼트 영역을 포함하고 있었지만, IDT는 해당 인터럽트가 발생하였을 때 어느 루틴을 실행시켜야 하는지에 대한 정보를 담고있습니다.
이상 4부분에 대해서 아리송했던 점을 책에서 발췌해서 정리해봤습니다.
좋은 참고가 되셨으면...
오늘 공부하면서 아리송했던 내용들이 이해하기 쉽게 써져있네요.
참고하시면 좋을듯합니다.
간략하게 정리하자면...
1. Real Mode와 Protected Mode
- Real Mode란 컴퓨터에 전원이 들어온 후 CPU가 처음 움직이기 시작하면서 활동하는 모드이다. 예전의 MS-DOS의 시스템같은... 현재는 거의 사용하지 않고있음.
- 그런데 Real Mode를 아직까지 사용하고 있는 이유는 예전에 사용되던 8086 CPU용의 DOS 프로그램을 현재에도 사용할 수 있도록 하는 호환성 문제 때문이다. 486을 사용하든지 Pentium을 사용하든지 Real Mode로 동작하고 있을때에는 CPU가 모두 하드웨어적으로 8086이 되어 있다고 생가하고 프로그램을 작성해야 한다.
- 따라서 모든 커널은 컴퓨터의 전원이 들어온 후 리얼모드에서 여러가지 하드웨어적인 세팅을 마친후 Protected Mode로 CPU를 전환한다.
2. 세그먼트와 오프셋
- 일반적으로 0x07C00번지는 0x07C0:0000, 0x0000:7C00, 0x0700:0C00 등 많은 방법으로 표현할 수 있습니다. 여기서 0x07C00번지를 물리주소라고 부르고, 0x07C0:0000등을 논리주소라도 합니다.
- 변환시킬때에는 세그먼트에 있는 값에 16을 곱하여 오프셋을 더한다.
예) 0x07C0:000 이라하면..
0X7C00 + 0x000 = 0x7C00 = 0x07C00
- 위에서 설명한 것은 Real Mode에서의 주소지정방식입니다.
- 즉, 우리가 웹페이지로 봐왔던 부분은 인텔 CPU가 Real Mode에서 주소를 지정하는 방식에 대해서 확인을 한것이고, Protected Mode에서는 리눅스는 리눅스 나름대로 윈도우는 윈도우 나름대로의 주소지정 방식을 사용한다는 내용인것 같네요.
3. GDT (Global Descriptor Table)
- Protected Mode에서 주소지정을 하기 위해서는 Real Mode -> Protected Mode로 전환하기 전에 미리 하나의 테이블(GDT)을 준비해야 합니다. 이 테이블은 어떤 형식이 있는 데이터의 나열이고, RAM영역 중 어디든지 기입해 놓을 수 있습니다.
이렇게 기입해 놓은 테이블은 Protected Mode로 변환 후 컴퓨터의 전원이 내려질때까지 그 자리에 있어야 합니다.
이 테이블에는 각 세그먼트 영역에 대해 이것들을 어떻게 사용할 것인지에 대해 설명해 놓습니다. 이것은 "커널이 이제부터 메모리를 어떻게 사용하겠다"라고 하는 설계서와 흡사한 것입니다.
4. IDT (Interrupt Descriptor Table)
- Protected Mode에서 인터럽트를 구현하기 위해서는 테이블이 하나 필요한데 이 테이블이 IDT라고 합니다.
- IDT도 GDT와 마찬가지로 RAM상에 저장되며, 메모리 중 어느 곳에라도 저장이 가능합니다. 이 테이블은 256개의 GDT의 디스크립터와 비슷하게 생긴 디스크립터로 구성되어 있습니다.
- GDT의 디스크립터는 메모리의 세그먼트 영역을 포함하고 있었지만, IDT는 해당 인터럽트가 발생하였을 때 어느 루틴을 실행시켜야 하는지에 대한 정보를 담고있습니다.
이상 4부분에 대해서 아리송했던 점을 책에서 발췌해서 정리해봤습니다.
좋은 참고가 되셨으면...
댓글 4
-
박경태
2007.03.06 16:38
-
박경태
2007.03.06 16:46
Win2K 아키텍처에서.. 물리메모리를 찾는 과정은..
(지난번에 이야기 했으니 대략적으로 덧붙여..)
segment selector|offset -> GDT의 segment Descriptor ->
Linear Address Space -> (Page Dir/Table/Offset) -> Physical Address space 로 가구..
앞부분을 "Segmentation" 뒷부분을 "Paging"이라고 부릅니다.
페이징에서 Current Process의 Page directory는 CR3 레지스터가 가지고 있다고 하네요.. (CR3는 Control Register인걸 지난번에 배웠구요..-.-)
Page Directory의 index가 1024개, Page Table의 index가 1024개, 한 Page가 4K 해서 전체 4GB가 된다는 구려..
^^ 시간되면, 배운거좀 더 올려볼게요..ㅎㅎ -
박경태
2007.03.06 16:55
글구보니,, 혹시 동영상 강의에 벌써 있는내용일려나^^;;
저는 주말에는 확고히 쉬는지라.. 오늘은 꼭 동영상도 봐야겠네요. ㅎ -
이수연
2007.03.09 05:54
286은 키보드의 A20 비트를 이용한 거라서 완전한 protected mode
는 아니구 386부터가 진정한 protected mode 를 구현한다고 보았던 기억이 있네요
Segment Type check 와 Ring Protection 는 같은 얘기 인거 같습니다. RPL , CPL , DPL 을 비교해서 서로 특권 레벨을 비교해서 허용 혹은 거부를 하며 디스크립터에 포함되어 있어서 자동으로 체크가 되는 걸로 알고 있습니다.
페이지의 크기는 항상 4k 는 아니구 PAE, PSE, 비트 등을 설정해서
4k ,2m , 4m 등의 설정이 가능한걸로 알고 있습니다.
.
Protected 모드는 80286에서 처음 도입했다고 하구.. CPU의 지원을 받아 O/S가 구현을 한답니다.
Intel CPU가 제공하는 대표적인 보호 기능 세가지는
1. Segment Type check (어디서 호출되는 놈인지? 호출가능한지)
2. Ring Protection (우리가 아는 특권레벨 0~3)
3. Tasks간의 분리
라고 하네요..