7. 디스크에서 OS이미지 로딩
BIOS 서비스와 소프트웨어 인터럽트
- BIOS는 우리가 일반적으로 많이 쓰는 라이브러리 파일과 달리 특별한 방법으로 외부에 제공한다.
- 함수의 어드레스를 인터럽트 벡터 테이블(Interrupt Vector Table)에 넣어 두고, 소프트웨어 인터럽트(SWI, Software Interrupt)를 호출하는 방법을 사용한다.
- 인터럽트 벡터 테이블(Interrupt Vector Table)
- 메모리 어드레스 0에 있는 테이블로 특정 번호의 인터럽트가 발생했을 때 인터럽트를 처리하는 함수(인터럽트 핸들러, Interrupt Handler) 검색에 사용한다.
- 테이블의 각항목은 인덱스에 해당하는 인터럽트가 발생했을 때 처리하는 함수 어드레스가 저장되어 있다.
- 각 항목은 크기가 4바이트 이다.
- 인터럽트는 최대 256개까지 설정할 수 있으므로 리얼모드의 인터럽트 벡터 크기는 최대 256*4 = 1024바이트가 된다.

- 디스크 서비스를 사용하려면 위의 표에 나와있듯이 0x13 인터럽트를 발생시켜야 한다.
- BIOS의 기능을 사용하려면 레지스터를 이용해 함수의 파라미터와 return값을 주고 받는다.
- BIOS 서비스 마다 요구하는 파라미터의 수가 다르므로 서비스에 맞는 레지스터를 확인하고 사용 할 것

플로피 디스크의 내부구조

- 헤드는 디스크의 표면을 의미
- 헤드의 개수는 디스크 수 * 2
- 플로피 디스크의 경우 디스크가 한장이므로 헤드의 개수는 2이다.
- 트랙은 디스크를 여러 개의 동심원으로 나눴을 때 그 동심원 하나가 가지는 영역을 의미한다.
- 플로피 디스크의 경우 80개
- 섹터는 디스크를 구성하는 가장 작은 단위로 트랙을 여러 조각으로 자른 것을 의미
- 플로피 디스크의 경우 18개
- 섹터번호는 1부터 시작하므로 1~18의 값을 갖는다.
- 플로피디스크의 모든 섹터를 순차적으로 읽는 알골리즘
- 섹터 = 1, 헤드 = 0, 트랙 = 0으로 설정
- 섹터를 1에서 18까지 증가시키면서 읽음
- 섹터 18번까지 다 읽었으면 0번 헤드를 다 읽었으므로 헤드 1증가
A. 헤드 = 1, 섹터 = 1로 변경 - 섹터를 1에서 18까지 증가시키면서 읽음
- 섹터 18번까지 다 읽었으면 0번과 1번 헤드를 모두 다 읽었으므로, 트랙 1증가
A. 트랙 = 1, 헤드 = 0, 섹터 = 1로 변경 - 2번에서 5번과정을 79번 트랙까지 반복
'Project > OS' 카테고리의 다른 글
9. 테스트를 위한 가상 os이미지 생성 (0) | 2019.07.16 |
---|---|
8. os 이미지 로딩 기능 구현 (0) | 2019.07.16 |
6. Bootloader 만들기 (0) | 2019.07.11 |
5. 부팅과 부트로더 (0) | 2019.07.11 |
4. 운영모드와 메모리 관리기법 (0) | 2019.07.11 |