CPU의 체크 포인트 Limit 체크 Limit 체크를 하지 않으면 다른 세그먼트에 있는 코드나 데이터가 overwrite 될 염려가 있음 일반 보호 예외(#GP)를 발생시키는 경우 오프셋이 유효 Limit보다 큰 바이트 오프셋이 유호 Limit-1바이트보다 큰 워드 오프셋이 유효 Limit-3바이트보다 큰 더블워드 오프셋이 유효 Limit-7바이트보다 큰 쿼드워드 GDT, IDT : GDTR, IDTR의 6바이트 중...
[Read More]
만들면서 배우는 OS 커널의 구조와 원리 ch5. Task Switching
TSS(Task State Segment) 선점형 방식 : 프로그램이 어떤 상황이던 일단 정지시키고 다른 프로그램이 이전에 실행했던 곳부터 다시 실행되도록 하는 방식 CPU에서 수행되던 프로그램의 레지스터 값들을 모두 램에 저장 한 후, 다른 프로그램의 레지스터 값을 CPU에 불러와서 다시 실행되도록 해야 함 태스크 스위칭을 구현하기 위해서 RAM 상에 레지스터 값들을 보존해야 할...
[Read More]
만들면서 배우는 OS 커널의 구조와 원리 ch4. 인터럽트와 예외
인터럽트 : CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 장치 혹은 예외 상황이 발생하여 처리가 필요할 경우 CPU에 알려 처리할 수 있도록 하는 것 IDT 2번째 16비트 한 워드 : 핸들러가 위치한 코드 세그먼트의 셀렉터 값, 커널 모드 코드 세그먼트 셀렉터 값을 기입하면 됨 P 비트 : 커널 모드의 코드...
[Read More]
만들면서 배우는 OS 커널의 구조와 원리 ch3. Protected Mode로 변환
멀티 태스킹이 가능한 32비트 커널을 만들기 위해서는 CPU가 Protected Mode로 동작하도록 하는 것이 필수 Real Mode의 한계 PC가 부팅할 때 맨 처음 동작하는 CPU의 모드 16비트로 동작하기 때문에 모든 레지스터를 16비트의 형태로 사용 16비트 Real Mode에서는 offset을 16비트 레지스터를 사용 세그먼트 영역 안에서 0x0000~0xFFFF 밖으로 나갈 수 없음 모든 메모리...
[Read More]
만들면서 배우는 OS 커널의 구조와 원리 ch2. 커널을 로드한다
부트로더 PC가 처음 부팅되었을 때 로드 되고 실행 디스크 상의 커널 프로그램을 램으로 읽어들여 커널이 실행되도록 하는 명령 수행 kernel.bin 복사 루틴 read: mov ax, 0x1000 mov es, ax mov bx, 0 mov ah, 2 mov al, 1 mov ch, 0 mov cl, 2 mov dh, 0 mov dl, 0...
[Read More]