Segmant and Offset

Programming/OS Development 2009. 3. 8. 01:14
Physical Address - 0x07C00
Logical Address - 0x07c0:0000

When you change from physical address to logical address, you add zero to 16 antilogarithm ( = shift towards left for four times ) then add offset.

0x07C0:0000 Calculation
0x7C00 + 0x0000 = 0x7C00 = 0x07C00

0x2004:0101 Calculation
0x20040 + 0x0101 = 0x20141

'Programming > OS Development' 카테고리의 다른 글

naked 함수  (0) 2009.05.11
Stack Frame  (0) 2009.05.11
NASM - 1  (0) 2009.03.11
Real Mode, Protected Mode  (0) 2009.03.08
1. 부트스트랩  (0) 2009.03.08

설정

트랙백

댓글

Real Mode, Protected Mode

Programming/OS Development 2009. 3. 8. 01:04
Real Mode 는 컴퓨터에 전원이 들어온 후 CPU가 처음 움직이기 시작하면서 활동하는 모드이다.
그리고 일괄 처리 밖에 할 수가 없다. 모든 커널은 컴퓨터에 전원이 들어온 후 리얼 모드에서 여러가지 하드웨어적인 세팅을 마친 후 Protected Mode로 CPU를 전환한다. 어떤 계열이든 처음에는 Real Mode시에 CPU는 하드웨어 적으로 8086 처럼 동작을 한다. 따라서 OS 첫 부분은 8086과 동일 하게 코딩해야 한다.

Protected Mode 는 Windows, Linux가 CPU에서 동작되고 있는 모드이다.
이 모드는 분할 처리가 가능하다. 그리고 Protected Mode에는 유저모드 와 커널 모드 두 가지가 있다. 커널모드 와 유저모드 를 왔다갔다 하면서 빠르게 실행을 하기 때문에 사용자는 동시에 진행되는 것
처럼 느껴진다. 커널 모드의 영역은 유저 모드 프로그램에서는 정해진 루트 외에는 접근이 불가능하다.
커널 루틴은 자원의 낭비와 메모리의 낭비를 최소화 한다.

'Programming > OS Development' 카테고리의 다른 글

naked 함수  (0) 2009.05.11
Stack Frame  (0) 2009.05.11
NASM - 1  (0) 2009.03.11
Segmant and Offset  (0) 2009.03.08
1. 부트스트랩  (0) 2009.03.08

설정

트랙백

댓글

1. 부트스트랩

Programming/OS Development 2009. 3. 8. 00:54

1. NASM 다운로드 : Netwide Assembler 컴파일러

http://sourceforge.net/projects/nasm 에 가서 download 메뉴를 누른다.

package 아래부분에 win32 binaries 를 다운 받아서 압축을 푼다.

 

2. NASM 환경변수 추가

"내컴퓨터" 마우스 오른쪽 버튼 눌러서 "속성" 메뉴 선택

"시스템 등록 정보"에서 "고급"탭 클릭

"환경 변수" 버튼 클릭 후 PATH선택하여 편집을 누르고 NASM의 압축이 풀린 경로명을 적어준다. ex) ~~~;c:\nasm

 

3. 부트 이미지 만들기

책에 있는 소스를 치고, 부트 이미지 만들 소스가 있는 위치로 폴더를 이동해서 ex) c:\OS 컴파일을 한다.

nasm -f bin -o boot.bin boot.txt 와 같이 컴파일을 하여 오류가 없을 경우 실행 파일이 만들어지게 된다.

설명 : -f bin 옵션 -> 제작할 실행 파일이 exe나 com등의 일반 dos실행 파일이 아닌 바이너리 실행파일 이라는 것을 어셈블러에게 알려준다.

exe나 com은 도스에서 램에 로드하고 실행하는 등 운영을 편하기 하기 위해 기계어로 된 실행파일의 머리부분에 헤더를 놓아 정보를 기록해 놓거나 하는 조작을 해놓은 것이다. 우리는 커널을 제작할 것이므로 그런 형식을 사용 안한다.

-o boot.bin 옵션은 실행 파일의 이름을 정해준다.

boot.txt 직접 작성한 소스 파일이름

 

4. USB 에 쓰기

http://www.chrysocome.net/dd 에 가서  리눅스에서 usb부트 디스크를 만들때 쓰는 dd 명령을 Windows 환경에서도 쓸 수 있게 해주는 프로그램을 다운 받는다. 압축을 풀고 거기 있는 dd.exe와  Disiko.dll 파일을 C:\Windows 로 옮긴다.

그리고 나서 "시작-실행" 에서 cmd를 입력하고, 명령 프롬프트에서 dd --list를 입력한다.

그러면 해당 드라이버를 보면 디바이스 명칭을 볼수 있다.

그럼 이제 USB디바이스에 dd명령을 이용하여 부트이미지를 usb로 옮긴다.

dd if=c:\OS\boot.bin of=\\.\g: 를 입력하면 c:\OS 폴더의 boot.bin 파일이 g:로 복사가 된다.

 

5. VMware로 실행하기

먼저 OS 개발 환경을 위해 VMWare를 설치한다. 그리고 거기에 OS없는 VM을 만들어서 마지막 부분에서 Customize Hardware 를 선택한다.

그리고 New CD/DVD메뉴 와 NetworkAdapter메뉴에 Connect at power on 에 체크를 해제한다.

Floppy 메뉴를 선택하여 Coonect at power on 에 체크를 한다. 그리고 두번째 Connection 에서 Use floppy image file 을 선택하고

Browse를 선택해서 컴파일한 boot.bin을 선택하여 확인을 한다. 이제 설정한 VM을 수행하면 부팅이 될것이다.

 

기계어 코드 EA0F00C007 은 바이트 수가 0xEA, 0x0F, 0x00, 0xC0, 0x07 로 5바이트 영역을 차지힌다.

E = 1111, A = 1010 8bit 이므로 1Byte

http://www.haiku-os.org/community/forum/how_to_install_haiku_to_usb_flash_drive_from_windows

http://shounen.ru/soft/flashnul/

 

 


'Programming > OS Development' 카테고리의 다른 글

naked 함수  (0) 2009.05.11
Stack Frame  (0) 2009.05.11
NASM - 1  (0) 2009.03.11
Segmant and Offset  (0) 2009.03.08
Real Mode, Protected Mode  (0) 2009.03.08

설정

트랙백

댓글