OS = 운영체제
정말 어려운 단어입니다. 대학교 시험 시간에도 자주 나오고... 제 인생의 단 두개뿐인..최악의 학점을 받았던 과목이기두 하구요 ^^;;; ㅡ.ㅜ;;; 여튼 그래도... 여튼 매력있는 단어이죠 조금알면 알수록 더 깊이 알아가게되고 지금 사용하고 있는 운영체제의 종류나 그 성향등도 궁금해지는게 많은게 당연합니다.
제 꿈이! 인공지능에 있다보니... 임베디드나 요런 분야에 관심이 가는데 OS또한 모르고 가려해도 갈수가 없더라구요 그래서 여러권의 책도 관심있게 보구 사기도 했으나 오늘 !! 드뎌 쾈하구!! 꽃히는 책을 만났답니다.
 OS구조와 원리 - OS 개발 30일 프로젝트 - _한빛미디어_(카와이 히데미 저, 이영희 역, 노재현 감수)
책 광고하려고 쓰는건 아니구요 ^^; 책의 1장전.. 프롤로그? 요걸 읽었는데 작가의 대화하듯 프로그램을 소개하는 그 어감과 ㅎ 뭐 다소 파격적인 30 일만에 만드는 OS라는 거에 이끌리게 되어 ^^;; 이렇게 하루하루 읽어 가보기로 했답니다.ㅎ
쩝..^^;; 포기하지 않고 30일만에 끝내야 할터인데..ㅜㅜ 그게 가장큰 걱정이네요.ㅎ 화이팅!!

뭐 무작정 따라하기 느낌이니 두서가 없어도 ^^;; 이해해주세요. 꾸벅 --) __) --) ^^;;

우선 갑자기 엄청 간단한 hello world라는 메시지만 출력되는 OS를 만듭니다.! ㅎㅎ

bz.exe 라는 프로그램을 이용해서 만드는데요
기계어를 다이렉트로 만들어주는 프로그램이랄까나요?;;
뭐 어디 찾아보니 게임 핵같은데도 쓰이는것 같습니다만 ^^;;;;;거기까진 모르겠구요
책에서 소개된 페이지는 막힌 페이지더라구요...ㅜㅜ 그래서 무식하게 일본 야후 들어가서 c.mos bz로 검색하니 ㅎㅎㅎ 나오더군요 ^^;; 책과 같은 버전으루..ㅎㅎㅎㅎ
뭐 그래서 냅다 다운받아서 아래와 같이 열심히 타이핑 했답니다.ㅜㅜ;;

bz.exe : 바이너리 에디터의 일종으로 간단하게 직역하면 2진수 편집기 ^^!


ㅎㅎ 이게 바로 BZ (바이너리에디터)입니다.ㅎㅎ

뭐 그냥 이게 다에요 ...;;;; 이룬.ㅜ;
그리고는 아래와 같이 쭈욱~~ 따라하시면 됩니다.
우선은 아래와 같이 절대 틀리지 않게 타이핑 하시면 되요 스페이스는 자동이니 뭐 무시하시고 열심히 입력하시면..ㅎㅎ 뭐 됩니다.;;;


이렇게 쭈욱 숫자랑 영어만 .. 뭐 아시는분은 아시겠지만 16진수로 0번지부터 쭈욱 입력해 나가시다 보면 옆에 자동적으로 뭐가 막 나타나는데요~~ 뭐 말그대로 자동으루요 ^^ㅎ 요게 엄청 신기하더군요....ㅎ
저아래 나지막히 겨우 읽을수 있는건 hello, world 요부분?ㅎ

뭐 우선 백문이 불여일견!! 한번 보시죠! 계속해서 입력합니다. 00만 .~~ 언제까지? 168000번지까지.. 왼쪽이 주소번지를 가리키는 거거든요.ㅎ 뭐 계속해서 넣으세요!! 쭈욱!! 팁은 Copy&Paste가 되는거니깐요 ^^;; 요거 잘쓰시면 되요.. 뭐... 한가하시다면 00을 계속 누르라고.. 저자가 말하더라고요.. 제가아니구 책 저자가...ㅡ.ㅡ;;



이렇게 00~을 쭈우~~~~욱 원없이 복사하고 나니.... 갑자기

0001F0주변과 001400주변에다가.. 다음과 같이.. 00이 아닌 숫자를 넣어주어야 한다는군요.;; 나참 어이없어서..뭐 우선 하라는대로 해야죠 ^^;;



처음엔... 이글쓰기 전까지만 해도.. 0001F0 주위에 값들을..바꾸는걸 몰랐었답니다.ㅜ;; 다시보이니 보이는군요.. 헌데 신기한건.. 그 주위의 값들 고치지 않고 돌려봤는데 되던걸요 ^^;; 뭐..;; 중요한건 아니었나봐요.ㅎ;;

여튼.. 잘 모르는 관계로 패스~~

그리고 Save 를 누르고는 helloos.img 로 저장을 합니다.ㅎㅎㅎ~~ 헬로~~OS~~

그리고는 갑자기 황당한 요구를 합니다.;;
이 시대에.. 플로피 디스켓을 이용해서 부팅해보라합니다.ㅡ.ㅜ;;
지금이 어느시대인데. ..ㅡ.ㅜ;;

ㅋㅋㅋ 뭐.. 그래서 VMware로 가상머신으로 돌리기로 맘먹었지요..ㅎ
VMware 환경은.. 간단하게 Setting했답니다. ㅎ


 

VM의 간단한 셋팅입니다.
VMware Version은 7.1.0 build-261024 를 사용합니다.ㅎ

중요한 포인트는 플로피 디스켓입니다.
위와 같이 Use floppy image file을 선택해서 위에서 열심히 BZ로 작업하고 저장했던 파일을 선택합니다.

그리고 당당하고 과감하게!! VM 가동!!ㅡㅡㅎ

참... 아주... 깜찍하죠? ㅎㅎㅎㅎ
그래도 감개가 무량합니다. 오오~~ 오오~~ 오오~~ 3번하고 나니.. 뭐 별다른 감흥은 없더군요.ㅜㅜ;;
OS라는게.. 참.. 하드웨어 장치를 쓰기 편하게 해주는 프로그램이다!! 라고 생각을 하면서.. 구동자체는 간단하구나.. ㅋㅋ
뭐 별생각이 다들면서.. 결론은.. 신기하더군요.ㅎ 재밌꾸!! 흥미진진하잖습니까? 나만 그런가 ^^;;; 뭐 여튼..다음 단계로 ㄱㄱㄱㄱㄱ~~~

뭐 끄는 건.. 전원을 눌러서 꺼버리라네요.ㅜㅜ;;
자 그렇게 전원을 끄구 계속 해서 궈궈궈궈~~

; hello-os
; TAB=4

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

  DB  0xeb, 0x4e, 0x90
  DB  "HELLOIPL" ; boot sector의 이름은 자유롭게 써도 좋다(8바이트)
  DW  512  ; 1섹터의 크기(512로 해야 함)
  DB  1  ; 클러스터의 크기(1섹터로 해야 함)
  DW  1  ; FAT가 어디에서 시작될까(보통은 1섹터째부터)
  DB  2  ; FAT의 개수(2로 해야 함)
  DW  224  ; 루트 디렉토리 영역의 크기(보통은 224엔트리로 한다)
  DW  2880  ; 드라이브 크기(2880섹터 해야 함)
  DB  0xf0  ; 미디어 타입(0xf0해야 함
  DW  9  ; FAT영역 길이(9섹터로 해야 함)
  DW  18  ; 1트럭에 몇개의 섹터가 있을까(18로 해야 함)
  DW  2  ; 헤드 수(2로 해야 함)
  DD  0  ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
  DD  2880  ; 드라이브 크기를 한번 더 write
  DB  0,0,0x29 ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
  DD  0xffffffff ; 아마, 볼륨 시리얼 번호
  DB  "HELLO-OS   " ; 디스크 이름(11바이트)
  DB  "FAT12   " ; 포맷 이름(8바이트)
  RESB 18   ; 우선 18바이트를 비어둔다

; 프로그램 본체

  DB  0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
  DB  0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
  DB  0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
  DB  0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
  DB  0xee, 0xf4, 0xeb, 0xfd

; 메세지 부분

  DB  0x0a, 0x0a  ; 개행을 2개
  DB  "hello, world"
  DB  0x0a   ; 개행
  DB  0

  RESB 0x1fe-$    ; 0 x001fe까지를 0x00로 채우는 명령

  DB  0x55, 0xaa

; 이하는 boot sector이외의 부분을 기술

  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 4600
  DB  0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
  RESB 1469432


바로 어셈블로 위와 같은 프로그램을 만드는거다.ㅎㅎ
뭐 여기부턴.. 뭐랄까.. 훔.. 심오하달까? 왠지 모르고 막무가내로 끌려간달까?
따라하래서 따라했지만.. 내꺼는 아닌듯한 그런기분? 훔..ㅡ.ㅡ;;

뭐 왠만한건 주석으로 나와있지만..
약간의 소개를 더 하자면

DB : 'data byte' 파일의 내용을 1바이트만 직접 쓰는 어셈블러의 명령어 소문자 'db'도 사용가능
RESB : 'reserve byte' 바이트 예약? RESB뒤의 나오는 숫자만큼 띄어놓는다.
           (단 여기서 사용되는 nask 어셈블러에서는 숫자만큼 0x00으로 채워놓는다.)
DW : 'data word' 16비트 2바이트
DD : 'data double-world' 32비트 4바이트
RESB 0x1f-$
 : 채워야 할 0x00의 개수를 유동적으로 알아서 채워주게끔 만들기 위해서 사용..?;;; 잘 이해되지 않는군요.ㅜ

뭐 첫날은.. 어셈블러를 이용해서 OS를!?아직 OS라 불러야 할지는 모르겠지만 여튼 돌아가는것!!
OS 끝까지 정복해 보겠으~~ 아자아자!!ㅎㅎ


첨부파일은 바이너리 에디터 bz와 nask라는 어셈블러 nas파일로 만들어준후에 어셈블러를 통해서 img파일을 만들면 된다.
ex) nask.exe helloos.nas helloos.img

+ Recent posts