새싹교실/2015/모래부터C까지/4월03일 (rev. 1.4)
1. 장소 : ZP실
2. 시간 : 18시 - 20시
- CPU의 명령 실행 과정: 불러오고 해석하고 실행하는 무한루프
- 부팅 -> Bootstrapping의 준말 -> Bootstrap: 부츠 끈
- 부츠 끈을 당겨 발을 끌어올리고 발을 뻗어 위로 올라간 다음 다시 부츠 끈을 당기고...... 무한루프를 돌리면 공중을 날 수 있음! 개이득!!
- 컴퓨터를 켤 때, 도대체 어떻게 OS를 초기화하는가? 소프트웨어를 돌리려면 OS가 필요한데, 그 OS도 소프트웨어인걸?
- OS도 소프트웨어인데, 그러면 소프트웨어를 돌리려면 소프트웨어가 필요한 상태? 부츠 끈 당기기랑 비슷한걸! -> Bootstrapping
- 전원을 인가하면 하드웨어 제조사가 미리 정의한 상태, RESET 상태로 들어간다. 이 상태에서는 몇몇 레지스터는 미리 정의된 값으로 설정됨.
- 예를 들자면, i8086의 RESET 상태에서는 CS가 0xFFFF, IP가 0x0000이라서 다음 명령 주소는 0xFFFF:0x0000이됨.
- 참고: CS:IP표기법은 매우 자주 보게 될 것임. 계산은 다음과 같이 한다: Next Instruction = CS << 4 + IP. CS 레지스터 값을 4비트 왼쪽으로 밀고 IP를 더한다. 따라서, 0xFFFF:0x0000 == 0xFFFF0 + 0x0000 == 0xFFFF0.
- 이 주소는 규격에 의해 BIOS를 가리키게 되어있음. -> BIOS가 부팅을 주관하게 됨.
- MBR는 아주 중요함 -> BIOS가 MBR을 읽어들여서 거기 들어있는 코드를 실행하기 때문에.
- 왜 C에는 main() 함수가 필수적인가?
- OS가 프로그램을 메모리로 적재한 후 main()으로 점프시키기 때문.
void main()
이 괜찮다고 하는 애들(ex. 윤X우씨)은 좀 맞아야 함.
- 황현: 허허 튜터가 피곤해서 후기를 안 쓰고 뻗어버렸더니 gg
- 이정재 : 할짓 없는 튜티가 후기 올릴곳이 없어 먼저 만듭니다. ㅋ 여튼 오늘은 저번에 비해 시간이 늘었네요. cpu 설명을 시작으로 부팅 설명 해 주셨을 땐 이해가 잘 됬습니다. 드디어 다음 시간 부터는 실습인가요. 기대가 됩니다.
- 유승신 : 캬. 할거 많은 튜티가 뒤늦은 후기를 올립니다. ㅋ 저번에 이어 이번에도 잔다고 약 10분 늦었네요 ㅋㅋㅋ 일단 설명은 첨부터 들은 것 같아서 좋았고, 이번에 배운 부팅의 유래, C언어의 함수를 아주 살짝 배웠던 점, 인텔과 암드의 비교, OS, APP, HW 사이의 상관관계가 젤 기억에 남네요. 이번에는 특별히 좋아하는? 내용이었기에 시간이 이렇게 많이 흐른줄도 몰랐군요 ㅎㅎ 다음부터 실습인데... C언어 다 까먹었는데, "Hello World!"부터 가르쳐주시는지요??? ㅋㅋㅋ