운영체제는 어떻게 만드는건가요..?

맹고이의 이미지

개념이 없는 초보라 질문드립니다..

운영체제라는걸 만들때 C언어 같은걸로 만드나요?아님 기계어?

유닉스가 C로 만들었다고 들은것 같기도 하고-_-a

그럼 컴파일이라는걸 해야될텐데.. 컴파일은 어디서 하는건가요?

gcc와 같은 컴파일러로 한다면..

또다른 운영체제위에서 컴파일 해야되는것 아닌가요?

그럼 최초의 운영체제는 어떻게?-_-a

학교에 운영체제라는 수업을 들으면 가르쳐줄것같지만 휴학중이라서요-_-

당췌 어떻게 돌아가는건지 개념없는 놈에게

답변 부탁드립니다

pynoos의 이미지

Linux의 경우 처음에는 floppy로 부팅할때 올라올정도의 크기로 시작하였습니다.

처음부터 공부하실 거라면, floppy로 부팅을 하는 방법을 배우시고,

terminal(키보드, 화면) 제어하는 것부터 만드시는 것이 어떨까요?

언어는 물론 부트스트랩에 Assembly어는 필수죠. 그리고 그 위에 올리는 것들은 CPU architect가 같은 compiler로 생성되는 assembly어를 수정해서 올리는 방법으로 하면 되지 않을까요?

Unix 다운 운영체계가 아니라, 단지 자신만의 코드로 부트 되고 입출력되는 것을 만들어 보는 것도 큰 의미가 있을 것 같습니다.

그 다음에는 file 입출력을 위해 file system을 다루어 보시고,

그 다음에 process, memory.. 관리 등등을 추가해가다 보면....

해 가다보면.......

되지 않을까요? ^^

kslee80의 이미지

학교 수업중에 OS 시간에는 실제로 제작에 대해서 다루지는 않을겁니다;
그 과목에서 실제로 다루는 것은 OS 가 어떤 원리로
Memory 관리하고, Disk 관리하고, Scheduling 을 어떻게 하고...등등
OS 의 내부 원리를 배우는 과목일겁니다;;

그리고, 글에 쓰신것처럼 Unix 는 C 로 만들어진게 맞습니다;;
최초의 OS 는 어떻게 만들어졌느냐는 의문을 가지신거 같은데;;

원래 컴퓨터를 사용하기 시작한 때의 언어는 기계어, 그후에 어셈블리언어가
존재했죠;; C 같은 고급(?)언어는 아직 탄생도 안한 시기에는
역시나 기계어, 또는 어셈블리어로 OS 를 제작했죠;;

그후에 고급언어들이 발전하고, 하드웨어가 발전해 왔지만...
한동안 OS 에 있어서는 기계어나 어셈블리어를 사용해야 한다는게
거의 정설로서 굳어져 있었죠..
하지만, 최초의 Unix 가 C 로 만들어지면서 이것이 깨지고,
최초의 Unix 가 탄생한 시기에 이로 인해서 많은 논란이 있었죠;

물론, OS 를 기계어로 제작한것과 C 로 제작한것은 차이가 납니다;;
C 로 만들어진 OS 가 아무래도 덩치나 성능면에서 떨어지죠...
(Unix 의 역사를 보다보면은 이에대한 언급이 있습니다. 기억이 안나서;;
쓰지는 못하겠네요 ^^;;)
하지만 OS 역시 유지보수가 중요시 되면서 점점 고급언어를 사용하는
추세입니다. 우리가 알고 있는 Linux 가 그러한 OS 중 하나죠..

버그소년의 이미지

OS의 스케줄링이나 어쩌구저쩌구 복잡한건 하나도 모르지만요..

어떠한 플랫폼을 기반으로 하느냐도 중요하단 생각이 듭니다.

마이컴과같이 작은 CPU의 단순한 OS(?)정도는 CPU벤더에서 제공하는

어셈 컴파일러나, C컴파일러를 사용할 수 있고요..

IBM호환 PC의 경우는.. 여러 어셈블 컴파일러를 사용할 수 있습니다.

개인적으로는 nasm사용합니다.

그리고, IBM호환 PC의 경우 마이컴과는 다르게 직접 CPU에 명령을 내리고

모든 I/O를 제어하는 것이 아니라 BIOS라는 프로그램(?)을 사용하죠.

보통의 OS상에서 어셈블리 코딩을 하는것과는 약간의 차이가 있습니다.

많은 인터럽트와 각 인터럽트의 모드 등등..

그리고, BIOS특성을 잘 알아야할겁니다. (다 똑갔겠지만.. ^^)

IBM호환 PC에서의 OS를 만들 작정이시면.. 윗분의 말씀대로 부팅

디스켓(이미지?)만드는걸 해 보심 좋을것 같습니다.

오래되서 기억은 잘 나지 않지만 Boot Control, Boot Strap등으로

검색해 보시면 될겁니다.

가끔은 밥을 굶어도 살 수 있다.

맹고이의 이미지

OS를 만들어볼생각으로 질문한게 아니었는데..ㅎㅎ

언젠간 장난감같지만 저만의 OS를 만들어보고픈 꿈은 있지만요

아직은 내공이..;;

여러가지 좋은 정보 주신분들께 감사드립니다~

p.s. 마이컴 CPU란게 무엇인지요?-_-a
컴퓨터 잡지가 생각났습니다-_-;;

송지석의 이미지

맹고이 wrote:
p.s. 마이컴 CPU란게 무엇인지요?-_-a
컴퓨터 잡지가 생각났습니다-_-;;

칩 하나에 CPU, (적은) 메모리, 플래시, 주변기기 컨트롤러가 같이 들어있어서 거의 하나의 칩으로 또는 센서같은 주변기기만 부착해서 돌아가게 할 수 있는 CPU를 말합니다. 음 예를 들면 자판기 제어나 에어컨 제어, 엘리베이터 등등 기계의 컨트롤러나 모니터, TV, 앰프등에 들어가지요.

요즘은 거의 모든 가전 기기에 CPU(대부분 마이컴)가 들어가는 추세입니다. 그리고 이제 그것들을 임베디드 시스템이라고 부르지요.

제 예상으론 앞으로 3,4년 동안은 임베디드의 시대일 거라고 봅니다. MS도 그걸 알고 손을 뻗치고 있지요.. 마치 인터넷 붐 직전에 그랬던 것 처럼..

애궁 이런 잡설을..

8051, 80c196, PIC, dragonball 등을 들어서 알고 있습니다.

ps. 들어봤다지만 전 ARM이랑 68K밖에 안써봤어요 >_<

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.