OS 만들기 2일차

a bc·2022년 8월 7일

makeOS

목록 보기
4/5
post-thumbnail

새로 배운 점

  • cpu에도 자체적인 메모리가 있다. 레지스터라고하고, 기계어의 변수로 쓰인다. 예를 들면 이렇게 쓰인다.
    MOV AX,0
    MOV는 대입 명령문이고 AX에 0을 대입하라는 뜻이다.
    cpu의 레지스터는 기억력이 변변찮아서, 이것만으로는 실행에 필요한 부트섹터의 내용도 기억할 수가 없다. 따라서 cpu 외부에 따로 메모리가 필요하다.
    동작원리는 cpu가 자신의 단자 일부를 사용하여 메모리에게 xx번지의 데이터를 나한테 보내줘 라는 전기신호를 보낸다. cpu는 메모리로부터 데이터를 읽고 쓴다.
    실제로 모든 연산은 레지스터에서 일어난다. 메모리에 쓰여져있는 데이터는 레지스터로 로드되고 레지스터에서 연산처리된다.

ipl.nas 파일

  ORG      0x7c00

  JMP      entry
  DB      0x90
  DB      "HELLOIPL"
  DW      512
  DB      1
  DW      1
  DB      2
  DW      224
  DW      2880
  DB      0xf0
  DW      9
  DW      18
  DW      2
  DD      0
  DD      2880
  DB      0,0,0x29
  DD      0xffffffff
  DB      "HELLO-OS   "
  DB      "FAT12   "
  RESB   18
  
entry:
  MOV      AX,0
  MOV      SS,AX
  MOV      SP,0x7c00
  MOV      DS,AX
  MOV      ES,AX
  MOV      SI,msg    
  
putloop:
  MOV      AL,[SI]
  ADD      SI,1
  CMP      AL,0
  JE      fin
  MOV      AH,0x0e
  MOV      BX,15
  INT      0x10
  JMP      putloop
  
fin:
  HLT
  JMP      fin

msg:
  DB      0x0a,0x0a
  DB      "hello, world"
  DB      0x0a
  DB      0

  RESB   0x7dfe-$

  DB      0x55,0xaa
  • hlt 명령어: cpu를 정지시킴. 완전히 정지시키는 건 전원을 꺼야가능하고, 이 명령어는 cpu를 대기 상태로 만듦. hlt 없이 jmp 명령을 실행시키면, cpu의 부하가 100프로가 돼서 전기를 계속 사용하게됨. 아무것도 하지 않으면 hlt 를 하는 습관을 길러두자.

  • pc에는 bios라는 프로그래밍이 있는데 이것은 pc 기판 상의 rom(readonly memory)이라는 소자에 들어있다. 이 bios는 os 제작자가 자주 사용할 것 같은 프로그램을 pc 제조사가 미리 준비해둔 물건이다. 'basic input output system'의 약어이다. 원래 os 개발자들을 위한 함수의 모임이고, int 명령어는 함수들을 호출하기 위한 명령이다. 덧붙여서 int 뒤으 숫자를 쓰는데 이것을 몇번에 하냐에 따라서 bios의 어느 함수를 호출하느냐임. 메모리에는 우리가 함부로 사용하면 안되는 부분이 있음. 그게 bios가 사용하는 부분이다. 0xf0000번지 부근에는 BIOS 자체가 들어있어서 절대 쓰면 안됨. window 나 linux를 쓸 때는 고려하지 않아도 되지만, 지금은 직접 os를 만들고 있기 때문에 신경써야한다. 0x00007C00 ~ 0x00007DFF 는 부트섹터가 로딩되는 주소이다. 왜 0x7c00이라고 물어보면 초기에 ibm에서 os를 만들때 정한 거임..

  • makefile 파일; 똑똑한 배치파일임. ipl.bin이 없으면 실행하고 있으면 다음 helloos.img 파일 없으면 다음 실행.. 되는 식으로 배치파일 수를 줄일 수 있게 됨.

  • 앞으로의 개발은 디스크 이미지 전체를 nas로 만드는게 아니라, 일단 512바이트의 부트섹터 부분만 만들고 나머지는 디스크 이미지 관리 툴로 만드는게 편리하다. cpu 자체 메모리가 부족하기 때문에 부팅할때 읽 helloos.nas 파일 내용 중 앞부분 512 바이트만 ipl.nas 부분으로 뺀다.

실습 시 문제점 + 해결

실습은 makefile 부분만 하면 됨

0개의 댓글