OS개발을 해보고 싶습니다.

ok_hwan의 이미지

안녕하세요^^ IDS라는 학생입니다.
제 일생의 목표 중 하나가 개인적으로 OS. 즉 운영체제를 제작하는것인데요.
수세스튜디오 등 여러 프로그램에 의존하지 않고 독립적으로 운영체제를 하나 만들어 보고 싶습니다.

일반인들이 사용하기에 불편함이 없을정도의 수준으로만 만들어보고 싶습니다.
물론 아주 힘들것이라고 생각합니다.

운영체제 개발은 상당히 힘들고, 복잡하니까요. 게다가 아직 프로그래밍 초보인 제가 어떻게 잘 해낼지. 그것조차 의문입니다.

하지만 제겐 목표가 있습니다. 개인 OS를 만드는것은 제 목표입니다. 그렇기 때문에 이곳 KLDP에 도움을 구해봅니다.

아직 감이 안잡힙니다. OS개발이란걸 어떻게 해야할지조차.

그래서 몇가지 질문을 드리고자 합니다.

1. 운영체제 개발을 위해서 필수로 익혀야 하는 언어는 무엇이며, 부가적으로 사용하면 좋은 언어는 무엇인가요?

2. 개인적으로는 GUI 운영체제를 만들고 싶습니다. GUI제작을 위해서 필요한 툴, 언어는 무엇인가요?

3. 추천해주실만한 책이 있으신가요?

4. 도움을 구하고자 하면 어떤분. 그리고 어떤 사이트에 질문하여야 하죠?

이정도 질문을 드리고자 합니다.
아직 감도 못잡은 상태라 질문도 제대로 하지 못했을 수 있습니다.
그렇기에 여기 KLDP 회원님들이 조언해주실 부분은 조언해주시면 감사하겠습니다.

hb_kim의 이미지

영어 못하면 다른것 다 잘해도 소용없으니 영어를 부단히 익히시고. 기껏 유명한 책이나 기사 정도나 번역판이 존재하지, 정말로 자신이 필요하고 원하는 정보는 남들이 한국어로 번역해주지 않습니다. 게다가 남들이 한국어로 번역해 주는 글을 읽는것은 남들이 씹어서 주는 음식을 받아먹는거나 마찬가지에요.

그리고 일단 최소 다음의 대학 수업을 우수한 성적으로 마치면 OS 를 만들수 있는 기본실력은 갖춰집니다.
디지탈 회로, 컴퓨터 아키텍쳐, OS 이론, 자료구조, C, 어셈블리언어.

위의 기본과정에 대해서 책보고 독학은 비추... 어짜피 기본 실력이 갖춰진 다음에는 독학으로 읽어야 될 소스코드의 분량이 꽤 많으니 그때 원하는 만큼 독학하세요.

mirheekl의 이미지

필요한 말씀은 다 해주셨네요..

1. 운영체제 개발을 위해서 필수로 익혀야 하는 언어는 무엇이며, 부가적으로 사용하면 좋은 언어는 무엇인가요? ====> "영어"

한가지만 제가 덧붙일 수 있다면, "수학"을 들고 싶습니다. 영어와 수학은 좋은 기회가 왔을 때 잡을 수 있는 자양분이라 생각합니다.

--

jeemin1의 이미지

OS를 만든다는게 정말 무에서부터 OS를 만든다는것도 되고
자신만의 리눅스 배포판을 만든다는 이야기도 되지만

뭐가되었든 결국 리눅스 소스를 열어볼 일은 생기게 됩니다.
가장 좋은 참고자료니까요.

개인적으로 생각하는 단계는... 리눅스를 직접 컴파일 정도만 해보는거로 시작해서,
여러 컴파일 옵션을 수정해보고, 나중엔 모듈을 이거저거 넣었다 빼었다 해보고,
더 나아가 모듈을 직접 제작해서 올려보고, 슬슬 리눅스 기본 구성요소에 손을대봐서
소스를 자기 입맛에 맞게 이리저리 수정해 보다 점점 리눅스 코어단까지 수정해 보고
그러한 단계를 거쳐서 OS를 처음부터 만드는 작업을 하는게 낫지 않나 싶습니다.

수학과 같이 기반지식 말고 OS 개발에 직접적으로 도움이 되는 지식이라면 결국 하드웨어단 지식이죠.
실제로 필요한건 IBM스팩이라 하여 컴퓨터를 제어하기 위한 스펙을 공부하셔야 겠죠.
결국 컴퓨터 OS라는것은 메모리에 값을 저장하고 바꾸는게 전부니까요.
다만 각각 메모리 주소가 각종 하드웨어제어용으로 맵핑되어 있는것들이 있어서 그걸 이용해 컴퓨터를 제어하는것인데
어느 주소가 어느 하드웨어의 어떤 동작을 하게 만드는지에 대한 스펙을 알아야 한다는 소리가 되니까요.

IBM스펙은 워낙 거대해서 처음부터 하기가 좀 부담스러우실수 있으니 차라리
AVR -> ARM -> IBM PC와 같은형태로 발전시키는것도 한가지 방법이 될 수 있습니다.
아무래도 매우 간단하게 구성된 하드웨어니까 말이죠

나빌레라의 이미지

http://www.yes24.com/24/goods/3337559?scode=032&OzSrank=1

http://www.yes24.com/24/goods/5271779

위 링크의 책을 읽고 그대로 따라하면 운영체제를 만들 수 있습니다.
하지만 그것은 글쓴님께서 만든 OS가 아니죠. 남이 만든 OS를 그대로 따라서 타이핑 한 것일뿐.

그러면 이제 저 책을 읽으면서 이해가 안되는 부분에 대한 공부를 모조리 하면
본인의 OS를 만들 수 있습니다.

그 공부는 첫 번째 댓글에 언급된 디지탈 회로, 컴퓨터 아키텍쳐, OS 이론, 자료구조, C, 어셈블리언어 + 수학 + 영어 등등등 이겠네요.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

tomahawk28의 이미지

저도 나빌레라님의 책을 읽고, 직접 EZ-Board에 올리는 실습을 해보았던게 Kernel을 이해하는데 아주 큰 도움이 되었습니다.

더불어 "영어"는 정말 너무나도 중요하기에 저조차도 감히 뺄 엄두도 못내겠네요

emptynote의 이미지

나빌레라님 팬으로써..

아주 오래전 개콘 유행어 인용하고 후다닥 도망가겠습니다.

"영광인줄 알아 이것들아.."

세벌의 이미지

필요한 언어가 뭐냐면 영어...operating system이나 운영 체제나 마찬가지인데 두 단어를 구글에 각각 넣었을 때의 결과는 많이 차이가 나지요.

Necromancer의 이미지

고등학생때 도스익스텐더 만들려고 하이텔 뒤져가면서 발버둥친거 생각나네요.
원리 아는데만 2~3년은 걸리겠네요.

반드시 알아두셔야 할것은

- 기계어/어셈블리
단순히 레지스터에 숫자 넣고 계산하고 그런게 아니라 각종 주변기기를 직접 제어할 능력이 있어야 함.
인터넷에 널린 초보강좌에는 이런거 절대 없음!
퀴즈 하나 : BMP, PCX파일 데이터를 다른 라이브러리 도움 없이 일부만이라도 어셈블리 프로그램으로 화면에 뿌려보세요

- 각종 Device 제어방식(Poll, Interrupt, DMA 등등) 및 그 방식의 목표시스템에서의 구현 형태
목표하는 시스템마다 다다름.
우리가 쓰는 PC(x86)라면 흔히 쓰이지 않는 장비 빼고는 표준이 정해져 있으니 영문 문서 잘 구해서 보면 알 수 있습니다.
출처는 분야별로 다양해서 여기서 얘기 불가능함.

- 수학은 "진법변환" 정도는 자유자재로 해야 합니다.
어셈블리만큼 2진수/16진수가 난무하는 프로그래밍 언어는 없음.

옵션 : 어셈블리 이외의 고급언어도 사용시 해당 컴파일러의 어셈블리 변환방식, 기계어/어셈블리와의 인터페이스 이해 필수.
고급언어쓰더라도 부트로더, 디바이스드라이버 등에는 어셈블리 안쓰면 절대 안됨.
x86은 이전프로그램 호환성을 위해서 여러 모드가 존재하는데 이 모드전환 구현은 어셈블리로만 가능.

옵션 : "컴퓨터구조론"을 알면 더 잘 만들 수 있겠습니다(옵션이긴 하나 사실상 필수에 가까움.)

Written By the Black Knight of Destruction