문제

을 만드 OS 처럼 보인다 대규모 프로젝트입니다.어떻게 사람이 얻을 시작하는가?

예를 들어,때 나는 팝 Ubuntu 나의 드라이브할 수 있는 방법을 내 컴퓨터 실행 그것은? (이 나오는 것 같이 내가 정말 알고 싶습니다.)

나보고,그것이 또 다른 각도에서,무엇 최소 금액이의 바이트 될 수 있는 디스크에서 여전히"로"실행 OS?

(나는 죄송하는 경우 이은 막연하다.가 이 주제에 관하여,그래서 나는 할 수 없습니다.나는 척하는 알고 공정한 금액에 대한 컴퓨터가 작동하는 방법,그러나 나는 완전히 우둔 이 주제에 관하여.)

도움이 되었습니까?

해결책

글쎄, 대답은 책에 살고 있습니다. 현대 운영 체제 - Andrew S. Tanenbaum 아주 좋은 것입니다. 아래 표지 그림.

학습 또는 호기심에 적합한 가장 간단하지만 완전한 운영 체제 커널은 다음과 같습니다. 미니 닉.
여기 당신은 찾아 볼 수 있습니다 소스 코드.

Modern Operating Systems
(원천: cs.vu.nl)

다른 팁

운영 체제는 거대한 주제입니다. 운영 체제가 어떻게 설계되고 구성되는지에 대해 깊이 가고 싶다면 추천 할 수있는 가장 좋은 방법은 좋은 책입니다.

Operating System Concepts

운영 체제 개념

당신이 정말로 궁금하다면 나는 당신을 지시 할 것입니다 처음부터 리눅스 운영 체제의 완전한 내용을 배우기에 좋은 장소와 모든 조각이 어떻게 맞는 지. 그것이 당신이 찾고있는 것보다 더 많은 정보라면 이 위키 백과 기사 운영 체제는 시작하기에 좋은 곳이 될 수 있습니다.

PC는 시작 지침을 위해 디스크의 특정 섹터를 살펴 보는 것을 알고 있습니다. 이러한 지침은 프로세서에 주어진 프로세서 인터럽트에서 특정 코드를 호출해야한다고 알려줍니다. 예를 들어,주기적인 진드기에서 스케줄러 코드를 호출하십시오. 장치에서 무언가를 얻으면 장치 드라이버 코드를 호출하십시오.

이제 OS는 시스템으로 모든 것을 어떻게 설정합니까? Hardware도 API도 있습니다. 그들은 시스템 프로그래머를 염두에두고 작성되었습니다.

나는 많은 베어 본 OS를 보았고 이것은 실제로 절대적인 핵심입니다. 자체 재배 한 OS가 많이 있습니다.

응용 프로그램이 운영 체제에 메모리를 요청하거나 특정 작업에 대한 특별한 권한을 요구하는 것과 같은 추가 기능은 대부분의 PC 아키텍처에서 구현되었지만 실제로 선택 사항입니다.

운영 체제는 간단히 말해서 소프트웨어가 하드웨어를 관리 할 수있는 것입니다. 분명히 일부 OS는 다른 OS보다 더 정교합니다.

바로 핵심에서 컴퓨터는 고정 된 주소로 실행되기 시작합니다. 즉, 컴퓨터가 시작될 때 프로그램 카운터를 사전 정의 된 주소로 설정하고 기계 코드를 실행하기 시작합니다.

대부분의 컴퓨터 에서이 "부트 스트랩"프로세스는 알려진 주변 장치 (예 : 디스크 드라이브)를 즉시 초기화합니다. 일단 초기화되면 부트 스트랩 프로세스는 사전 정의 된 시퀀스를 사용하여 주변 장치를 활용합니다. 디스크 드라이버를 다시 사용하면 프로세스는 하드 드라이브의 첫 번째 섹터에서 코드를 읽고 RAM 내의 공간에 배치 한 다음 해당 주소로 이동할 수 있습니다.

이러한 사전 정의 된 시퀀스 (CPU의 시작, 디스크 로딩)는 프로그래머가 CPU 스타트 업의 초기 부분에서 점점 더 많은 코드를 추가 할 수있게 해주 며, 이는 시간이 지남에 따라 결국 매우 정교한 프로그램을 시작할 수 있습니다.

현대 세계에서는 정교한 주변 장치, 고급 CPU 아키텍처 및 광대 한 광대 한 자원 (GBS 또는 RAM, DISK의 TB 및 매우 빠른 CPU)을 갖춘 현대 세계에서 운영 체제는 개발자 (여러 프로세스, 가상 메모리)를위한 매우 강력한 추상화를 지원할 수 있습니다. ,로드 가능한 드라이버 등).

그러나 자원이 제한된 간단한 시스템의 경우 "OS"를 위해 많은 것을 필요로하지 않습니다.

간단한 예로, 많은 소규모 컨트롤러 컴퓨터는 매우 작은 "OS"ES를 가지고 있으며 일부는 단순히 "모니터"로 간주 될 수 있으며 직렬 포트 (또는 터미널 또는 LCD 디스플레이)에 쉽게 액세스 할 수있는 것보다 더 쉽게 접근 할 수 있습니다. 확실히, 이러한 조건에서는 큰 OS에 대한 요구가 많지 않습니다.

또한 클래식 한 시스템과 같은 것을 고려하십시오. 여기에는 디스크 I/O, 콘솔 I/O, 메모리 관리 및 실제 프로그래밍 언어 및 어셈블러를 제공하는 "OS"가있는 시스템이 있습니다. 8 비트 기계.

또는 BIOS 및 BDOS가있는 CP/M의 옛날.

CP/M은 간단한 OS가 다양한 하드웨어 배열에서 휴대용 프로그램을 실행할 수 있도록 추상화 레이어로 잘 작동하는 좋은 예이지만 시스템은 시작 및 실행에 8K 미만의 RAM이 필요했습니다.

현대 OS에서 사용하는 메모리의 MB와는 거리가 멀다. 그러나 공정하게 말하면, 우리는 MBS의 기억을 가지고 있으며, 우리의 삶은 훨씬 더 단순하고 (대부분) 훨씬 더 기능적입니다.

OS를 작성하는 것은 하드웨어 인쇄 "Hello World"를 한 번에 1 바이트로 만드는 것이 흥미 롭기 때문에 재미 있습니다.

X86 에뮬레이터를 받고 파티를 받으십시오. 부팅 부문을 얻으십시오. 그것은 낄낄 거리는 치료입니다.

기본적으로 ... 컴퓨터는 디스크를 실행할 수 있습니다.

BIOS에는 부팅 순서에 해당 디스크 장치가 포함되어 있습니다.

부팅시 BIOS는 플로피 드라이브, 하드 드라이브 및 CD ROM과 같이 모든 부팅 가능한 장치를 순서대로 스캔합니다. 각 장치는 미디어에 액세스하고 미디어를 식별하는 지문의 하드 코딩 된 위치 (일반적으로 디스크 또는 CD 장치의 섹터)를 점검하고 지침이 시작되는 디스크 (또는 미디어)에서 점프 할 위치를 나열합니다. BIOS는 장치에 헤드 (또는 무엇이든)를 미디어의 지정된 위치로 옮기고 큰 지침을 읽도록 지시합니다. BIOS는 이러한 지침을 CPU에 건네줍니다.

CPU는 이러한 지침을 실행합니다. 귀하의 경우, 이러한 지침은 Ubuntu OS를 시작할 것입니다. 그들은 중단 또는 10+20 등을 추가하라는 지시 일 수 있습니다.

일반적으로 OS는 큰 메모리 덩어리를 가져 와서 시작합니다 ( 'GlobalAlloc'등과 같은 라이브러리 명령은 아직로드되지 않은 -OS에서 제공 할 수 있으므로 CPU에서 직접 직접 출발합니다. ) 그리고 OS 자체를위한 구조를 만들기 시작합니다.

OS는 메모리 관리, 파일 시스템, 입력/출력, 작업 스케줄링, 네트워킹, 그래픽 관리, 프린터 액세스 등과 같은 애플리케이션에 대한 '기능'을 제공합니다. 그것이 당신이 '제어를 얻는'전에하는 일입니다. 모든 서비스를 작성/시작하여 나중에 응용 프로그램이 서로의 기억에 달려 있지 않고 OS 제공 서비스에 멋진 API를 갖지 않도록합니다.

OS가 제공하는 각 '기능'은 큰 주제입니다. OS는 모든 것을 제공하므로 응용 프로그램은 올바른 OS 라이브러리에 전화하는 것에 대해 걱정해야하며 OS는 두 프로그램이 동시에 인쇄하려고하는 경우와 같은 상황을 관리합니다.

예를 들어, OS가 없으면 각 응용 프로그램은 다른 프로그램이 인쇄하려는 상황을 처리하고 어쨌든 인쇄하거나 다른 작업을 취소하는 것 등을 대신해야합니다. 대신 OS 만 처리해야합니다. 응용 프로그램은 OS에 '이 물건을 인쇄'하고 OS는 하나의 앱을 인쇄하도록 보장하며 다른 모든 앱은 첫 번째 앱이 끝날 때까지 기다려야합니다.

"OS"가 많은 기능을 암시 할 수 있으므로 OS가 될 바이트의 양은 실제로 의미가 없습니다. 당신이 원하는 것이 CD에서 프로그램을 실행하는 것이 아니라면, 그것은 바이트가 거의 없습니다. 그러나 그것은 OS가 아닙니다. OS의 임무는 다른 많은 프로그램을 실행할 수 있도록 서비스를 제공하고 프로그램에 대한 해당 서비스에 대한 액세스를 관리하는 것입니다. 어렵고 더 많은 공유 리소스 (네트워크, WiFi, CD 버너, 조이스틱, Isight 비디오, 듀얼 모니터 등)가 더 어려워집니다.

http://en.wikipedia.org/wiki/linux_startup_process 당신은 아마 이것을 찾고있을 것입니다.http://en.wikipedia.org/wiki/windows_nt_startup_process 아니면 이거.

내가 본 가장 최근의 운영 체제 프로젝트 중 하나는 심각한 후원이있는 MS 연구 프로젝트였습니다. 특이, 이것은 완전히 C#.net으로 처음부터 작성되었습니다.

얼마나 많은 작업이 필요한지 아이디어를 얻으려면 2 개의 핵심 개발자가 있지만 주어진 시간에 최대 12 명의 인턴이 있으며, OS를 부팅하고 부팅 할 수있는 지점으로 OS를 가져 오기까지 2 년이 걸렸습니다. BMP 이미지를 표시합니다 (프리젠 테이션을 수행하는 방법입니다). 그들이 명령 줄이있는 지점에 도달하기까지 훨씬 더 많은 작업이 필요했습니다 (약 4 년).

기본적으로 OS가 실제로 무엇에 대한 논쟁이 있습니다. ~이다. 모든 사람이 OS가 구체적으로 무엇인지에 대해 동의한다면 (커널 모드에서 실행되는 모든 것입니까? 커널 모드에서 실행되는 모든 것입니까? OS의 일부입니까? X가 OS의 일부입니까? 웹 브라우저가 OS의 일부입니까?) 응답합니다! 그렇지 않으면 질문에 대한 구체적인 답이 없습니다.

책을 얻고 싶을 수도 있습니다 FreeBSD 운영 체제의 설계 및 구현 매우 자세한 답변. Amazon 또는이 링크에서 freebsd.org에 대한이 링크에서 가져올 수 있습니다. 링크 텍스트

나는 이것이 언급되지 않았다는 것을 믿을 수 없지만 ... 운영 체제 디자인의 개요를위한 고전적인 책은 운영 체제 - 설계 및 구현 Minix의 제작자 인 Andrew S Tanenbaum이 작성했습니다. 이 책의 많은 예제는 Minix를 향한 직접적으로 준비되어 있습니다.

조금 더 배우고 싶다면 OS DEV 시작하기에 좋은 곳입니다. 특히 위키. 이 사이트는 소규모 프로젝트/취미를 위해 개인 운영 체제를 작성하는 개발자뿐만 아니라 정보로 가득합니다. OSDEV와 같은 보트에 많은 사람들이 OS에 들어가는 것을 배우고 싶어하는 사람들과 같은 보트에 많은 사람들이 있기 때문에 훌륭한 학습 자료입니다. 당신은 결국 직접 시도하게 될 수도 있습니다!

운영체제(OS)은 층을 제어하는 소프트웨어 하드웨어입니다.간단한 하드웨어 간단 OS,반대의;-)

는 경우의 초기에 마이크로 컴퓨터,맞출 수 있 OS 로 16K ROM 및 하드 와이어 마더보드에 실행을 시작하고 지침은 컴퓨터 코드의 시작에서 ROM 주소 공간이 있습니다.이'스트랩'프로세스가 다음을 로드하는 코드 드라이버 같은 다른 장치의 키보드,모니터,floppy drive,etc., 과 몇 초 이내에 귀하의 컴퓨터를 부팅하고 사용할 준비가 되었습니다.

요즘...동일한 원칙이지만,많은 더 복잡한 하드웨어;-)

오, 이것은 재미있는 것입니다. 나는 어느 시점에서 모든 일을했고, 진화의 많은 부분을 통해 거기에있었습니다.

일반적으로 소규모로 시작하여 새 OS를 작성하기 시작합니다. 가장 간단한 것은 부트 스트랩 로더로, 코드 덩어리를 끌어 내고 실행하는 작은 코드 덩어리입니다. 옛날 옛적에 노바 또는 PDP 컴퓨터를 사용하면 전면 패널을 통해 부트 스트랩 로더를 입력 할 수 있습니다. 부트 로더는 일부 매체를 메모리에 읽고 프로그램 카운터를 해당 코드의 시작 주소로 설정합니다.

그 코드의 덩어리는 다른 것을로드하지만 그럴 필요는 없습니다. 베어 메탈에서 실행되는 프로그램을 작성할 수 있습니다. 이러한 종류의 프로그램은 그 자체로 유용한 것을 수행합니다.

실제 운영 체제는 더 크고 더 많은 조각이 있습니다. 프로그램을로드하고 메모리에 넣고 실행해야합니다. IO 장치를 실행하려면 코드를 제공해야합니다. 점점 커지면 메모리를 관리해야합니다.

실제로 작동하는 방식을 배우고 싶다면 Doug Comer의 Xinu 책, 앤디 Tannenbaum최신 운영 체제 책 미니 닉.

노력하다 컴퓨터가 부팅되는 방법, 커널 부팅 프로세스 및 기타 관련 기사 같은 블로그에서 a 짧은 개요 부츠를 부팅 할 때 컴퓨터가하는 일.

시작이 크게 의존 할 때 컴퓨터는 무엇을합니까 (아마도 명백할까요?) CPU 디자인 그리고 다른 "저수준의 물건"; 따라서 무엇을 예상하기가 어렵습니다 당신의 컴퓨터는 부츠를 부팅 할 때합니다.

글쎄, 당신은 칩의 시작을 "바이오스"와 OS에 연결하는 것이 있습니다. 이는 일반적으로 많은 코드 서비스에 의해 수행되는 매우 복잡한 작업입니다.

당신이 이것에 대해 더 많이 알고 싶다면, 나는 책을 읽는 것을 권장합니다 ... microcontrllers, 특히 8051 등에 대한 C에서 작은 OS를 만드는 것입니다. 부트 로더 OS ".

체크 아웃하고 싶을 수도 있습니다 이 질문.

OS는 다른 응용 프로그램과 마찬가지로 프로그램입니다. 이 프로그램의 주요 목적은 다른 프로그램을 실행할 수 있다는 것입니다. 최신 OS는 최신 하드웨어를 활용하여 프로그램이 서로 충돌하지 않도록합니다.

자신의 OS를 작성하는 데 관심이 있으시면 여기에서 내 질문을 확인하십시오.

운영 체제 개발을 시작하는 방법

물어 디스크를 켜고 여전히 OS로 실행할 수있는 바이트를 몇 바이트? 답은 OS에 대해 기대하는 것에 달려 있지만 가장 작은 유용한 내가 아는 OS는 1.7 메가 바이트에 적합합니다. 그것은이다 톰의 루트 부츠 디스크와 "구조"응용 프로그램이있는 작은 OS가 플로피 디스크 하나에 맞습니다. 모든 기계에 플로피 드라이브가 있고 모든 기계에 CD-ROM 드라이브가있는 것은 아니기 때문에 자주 사용했습니다.

나는 그것에 대해 당신의 삶과 같다는 것입니다. 처음에는 거의 알지 못합니다. 이것은 BIOS가 제공하는 것과 유사합니다. 디스크 드라이브를 찾고 정보를 읽을 수있을만큼 충분히 알고 있습니다. 그런 다음 초등학교에 갈 때 조금 더 배웁니다. 이것은 부팅 섹터가 메모리로 읽고 통제권을 부여받는 것과 같습니다. 그런 다음 OS 커널로드와 같은 고등학교에갑니다. 그런 다음 대학에갑니다 (운전자 및 기타 응용 프로그램). 물론, 이것은 당신이 충돌 할 책임이있는 시점입니다. 그는 그분.

결론은 점점 더 많은 기능의 층이 천천히로드된다는 것입니다. OS에 대한 마법은 없습니다.

여기를 읽는 것은 Linux를 만드는 데 필요한 아이디어를 제공합니다.https://netfiles.uiuc.edu/rhasan/linux/

하나의 디스크에 맞는 또 다른 소규모 운영 체제는 QNX입니다 (오래 전에 마지막으로 보았을 때 GUI 인터페이스, 웹 브라우저, 디스크 액세스 및 내장 웹 서버가있는 전체 OS가 플로피 드라이브에 맞습니다). .

나는 그 이후로 그것에 대해 너무 많이 듣지 못했지만 실시간 OS이므로 매우 빠르게 설계되었습니다.

사실, 어떤 사람들은 4 년제 대학을 방문하여 이것에 대한 대략적인 아이디어를 얻습니다 ..

핵심에서 OS는 매우 간단합니다. 다음은 성공적인 OS가 수행 할 작업에 대한 초보자 안내서입니다. 1. 예약 할 프로세스 (프로그램 실행 인스턴스)를 결정하는 스케줄러를 사용하여 CPU를 관리합니다. 2. 메모리를 관리하여 모든 프로세스가 명령어 (코드) 및 데이터 (변수)를 저장하는 데 사용하는 모든 프로세스를 결정합니다. 3. 디스크 드라이브, 알람, 키보드, 마우스와 같은 I/O 인터페이스를 관리합니다. 이제 3 가지 이상의 요구 사항을 통해 프로세스가 의사 소통을하고 (싸우지 않고) 외부 세계와 상호 작용하여 응용 프로그램이 원하는 작업을 수행하도록 도와줍니다. 그것이 어떻게 그렇게하는지 더 깊이 파고 들으려면 공룡 책을 읽으십시오 :)

따라서 모든 하드웨어 리소스를 처리하는 한 OS를 원하는만큼 작게 만들 수 있습니다. 부팅 할 때 BIOS는 CPU에 부트 로더를 읽기 시작하도록 지시합니다 (메모리의 고정 주소에있는 OS의 첫 번째 기능 (Small C 프로그램의 Main)과 같은 것). 그런 다음 기능과 프로세스 및 스레드를 생성하고 빅뱅을 시작합니다!

첫째, 읽기와 읽기에 대한 읽기, OS는 무엇입니까? 그런 다음 다른 OS의 사용/ 유형/ 자연/ 목표/ 요구 사항은 무엇입니까? 일부 링크는 다음과 같습니다. 초보자는 다음 링크를 즐길 것입니다.

현대 OS - 이것은 일반 OS에 대한 아이디어를 제공합니다.

OS의 시작 - 이것은 OS를 만드는 데 실제로 필요한 기본, 우리가 그것을 만들 수있는 방법 및 현재 OS의 오픈 소스 코드를 스스로 수정할 수있는 방법에 대한 기본 사항을 제공합니다.

위키 OS - 다른 필드에 사용 된 다른 OS와 IT의 사용 (OS의 객체 / 기능)에 대한 아이디어를 제공합니다.

OS가 포함하는 내용을 일반적으로 보자 (정교한 Linux 또는 Windows가 아님)

OS는 CPU가 필요하고 코드를 덤프하려면 bootloader. OS는 FullFill의 목표를 가져야하며 해당 목표는 래퍼에 정의되어야합니다. Kernel당신은 가질 수 있습니다 scheduling time 그리고 ISR's (목표와 OS에 따라 다릅니다)

OS 를 개발하는 것은 매우 복잡한 일입니다.일부 웹사이트는 다음과 같 osdev 또&가벼운 pc 클리너.eu(독일어)에 전념하는 항목입니다.또한 일부 도서,다른 사람이 이미 언급.

내가 도울 수 없어요 하지만 또한 참조"쓰기에 자신의 운영 시스템"시리즈의 비디오는 유튜브에,나는 하나 그것을 만들었:-)

https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top