본문 바로가기

Project/OS

OS 개발 18챕터 라운드 로빈 알고리즘이랑 태스크풀 등을 구현했다. 뒤로 갈수록 사실 흥미가 조금씩 떨어져서 의욕이 잘 나지가 않는다ㅠㅠ 잠깐 지금까지 했던거 다시 복습할 겸 헷갈리는 내용들 쭉 다시 읽어보고 이해하고 다음으로 넘어가야겠다. 근데 엄청 신기하다ㅋㅋㅋ 더보기
OS 개발 17챕터 드디어 멀티스레드를 향해서 가고 있다. 오늘은 두 태스크가 서로 왔다갔다 하는거를 만들었다. 뭔가 타자도 좀 빨라지고 오류를 찾는 속도도 빨라진거 같아서 좋다. 그리고 중간에 갑자기 이런 13번 예외가 발생했다고 해서 좀 놀랐었다.. 13번은 무슨 듣도보도 못한 Gerneral Protection ISR 예외던데 엄청 당황스러웠다. 소스를 잘 보니 push rax를 두 번 해서 생긴 예외더라. 생각보다 빨리 해결할 수 있어서 좋았다. 더보기
OS 개발 16챕터 16챕터에서는 시간 관련된 작업들을 했다. 되게 어려우면서 신기했다. 이제 3부가 끝나고 4부로 들어간다. 4부에서는 두 번째로 관심을 가지고 있는 멀티스레딩에 대해서 만든다.멀티스레딩 부분이 엄청 기대된다. 더보기
OS 개발 15챕터 드디어 제일 기대되었던 쉘을 만들었다. 생각보다 코딩할 양이 많았다.. 그래도 이제 쉘이 생기고 진짜 OS처럼 보이기 시작하는 것 같다. 이제 쉘에 이것저것 넣고 싶은 기능들도 여러가지 넣어야겠다. 더보기
OS 개발 14챕터 주말동안은 pctf를 하느라 OS 코딩을 못했다. 오늘은 키보드 디바이스 드라이버를 업그레이드 했다. 이전에는 입출력 포트를 무한 루프를 돌면서 키 입력을 받았었다면 이번에는 큐 자료구조를 만들고 인터럽트로 키보드 입력을 받아서 처리하도록 했다. 내일 이제 유저와 상호작용하는 쉘을 짜야겠다. 더보기
OS 개발 13챕터 PIC를 컨트롤 하는 방법을 공부하고, 예외와 인터럽트에 대해서 핸들러들을 추가했다. PIC를 이용해서 하는 부분이 어렵고 헷갈렸지만 하드웨어를 제어하는 것 같아서 되게 신기했다. 빨리 콘솔 쉘을 만들어 보고 싶다. 더보기
OS 개발 12챕터 오늘은 GDT를 재설정 하고 TSS, IDT를 추가했다. IDT는 시스템 콜 공부하면서 조금 공부해 봤었는데 이번 기회에 확실하게 다시 알 수 있는 기회가 되어 좋았다. 앞으로는 문법 오류보다는 논리 오류에 좀 더 신경을 써서 코딩을 해야겠다.원래 알고 있던 지식과 새로 공부해서 알게된 지식이 조합을 잘 이루어 조금씩 탄탄해 지는 것 같다. 더보기
OS 개발 11챕터 오늘은 드디어 처음 IA-32e 모드로 들어와서 키보드 디바이스 드라이버를 만들었다. 이번 챕터에서는 느낄 수 있던 점이 몇 가지 있었다. 먼저 키보드와 마우스가 컴퓨터와 어떻게 통신을 하는지와 scan code라는 것에 대해서 확실하게 알았다. 그리고 예전에 Reversing.kr의 Windows Kernel 문제를 풀 때에는 단순히 커널 디버깅만 하면서 엄청 노가다를 해서 풀었었다. 그 때에는 왜 키보드 입력은 0x60 포트로 받아 들이는 지도 몰랐었고 scan code의 존재도 몰랐었다. 그 때는 그냥 아 커널은 이런가 보다 하면서 scan code도 직접 수작업으로 노가다 해서 테이블 만들어 풀었었는데 지금 생각해 보니까 정말 많은 노가다 였던 것 같다.. 머리가 나쁘면 몸이 고생한다는 말이 역시.. 더보기
OS 개발 10챕터 드디어 오늘 IA-32e 모드로 들어갔다. 지금부터 키보드 드라이버도 만들고 멀티 쓰레드 등등 이것 저것 할 것 같다. IA-32e 모드로 전환할 때는 약간 복잡해서 여러번 책을 읽어 봤었다. 그리고 또다시 오류와 맞닥뜨렸다. 이 오류는 진짜 너무 오랬동안 찾던 오류였다. 크게 세 가지가 있었는데 첫 번째는 makefile에 문제가 있었다. 64비트용 makefile을 만들 때 32비트 makefile을 가져와서 수정하는 방식으로 했는데 중간에 수정하지 못한 부분이 있었던 것이다. 그렇게 한참을 찾고 난 뒤에 다시 빌드해서 부팅을 했는데 계속해서 리부팅만 하는 거였다. 삽질한 결과 문제는 또 ImageMaker에 있었다. 소스를 업데이트 하면서 중간에 빠뜨린게 또 있어서 섹션이 제대로 정렬이 안됬었나보다.. 더보기
OS 개발 9챕터 9챕터는 IA-32e 모드로 전환하기 위해서 페이지 테이블들을 설정하는 작업을 했다. 처음에 페이징 공부할 때 진짜 머리가 터지는 줄 알았는데 직접 짜보면서 관계를 이해하고 보니까 좀 봐줄만 하다. 그래도 어렵다. 진짜 페이징 같은 것들을 다중 포인터로 해서 구상하는 사람들은 머리가 얼마나 좋은 건지를 모르겠다. 오류는 make 오류 메시지를 보고서 바로 알 수 있는 오류들이라서 많이 삽질 하지는 않았다. 하나하나 알아가는 맛이 쏠쏠한 것 같다. 더보기