Question

Créer un système d'exploitation ressemble à un massif projet.Comment pourrait-on commencer ?

Par exemple, lorsque j'insère Ubuntu dans mon lecteur, comment mon ordinateur peut-il simplement courir il?(C'est, je suppose, ce que j'aimerais vraiment savoir.)

Ou, en regardant les choses sous un autre angle, quelle est la quantité minimale d'octets qui pourrait se trouver sur un disque tout en étant « exécuté » en tant que système d'exploitation ?

(Je suis désolé si c'est vague.j'ai juste aucune idée sur ce sujet, je ne peux donc pas être très précis.Je prétends en savoir beaucoup sur le fonctionnement des ordinateurs, mais je n'ai absolument aucune idée de ce sujet.)

Était-ce utile?

La solution

La réponse réside dans les livres: Systèmes d'exploitation modernes - Andrew S. Tanenbaum est un très bon. L'illustration de la couverture ci-dessous.

Le noyau du système d'exploitation le plus simple et le plus complet, adapté à l'apprentissage ou à la curiosité, est Minix .
Ici , vous pouvez parcourir le code source .

 Systèmes d'exploitation modernes
(source: cs.vu.nl )

Autres conseils

Les systèmes d'exploitation est un sujet important, la meilleure chose que je puisse vous recommander si vous souhaitez approfondir la conception des systèmes d'exploitation est un bon livre:

Concepts liés au système d'exploitation

Concepts du système d'exploitation

Si vous êtes vraiment curieux, je vous indiquerais Linux à partir de Scratch un bon endroit pour en apprendre davantage. les tenants et les aboutissants d'un système d'exploitation et comment toutes les pièces s'emboîtent. S'il s'agit de plus d'informations que vous ne le souhaitez, alors cet article de Wikipedia sur les systèmes d'exploitation peut s'avérer utile. endroit pour commencer.

Un PC sait regarder un secteur spécifique du disque pour les instructions de démarrage. Ces instructions indiqueront ensuite au processeur que, lors d'interruptions de processeur données, un code spécifique doit être appelé. Par exemple, à intervalles réguliers, appelez le code du planificateur. Lorsque je reçois quelque chose d'un périphérique, appelez le code du pilote de périphérique.

Maintenant, comment un système d'exploitation configure-t-il tout le système? Le matériel a également des API. Ils sont écrits en pensant au programmeur systèmes.

J'ai vu beaucoup de systèmes d'exploitation épurés et c'est vraiment le noyau absolu. Il existe de nombreux systèmes d’exploitation intégrés à la maison qui ne font que ça et rien d’autre.

Des fonctionnalités supplémentaires, telles que demander aux applications de demander de la mémoire au système d'exploitation, ou requérir des privilèges spéciaux pour certaines actions, ou même que les processus et les threads eux-mêmes soient réellement optionnels, bien qu'elles soient implémentées sur la plupart des architectures de PC.

Le système d'exploitation est tout simplement ce qui permet à votre logiciel de gérer le matériel. Il est clair que certains systèmes d’exploitation sont plus sophistiqués que d’autres.

À la base, un ordinateur commence à s'exécuter à une adresse fixe, ce qui signifie que lors du démarrage de l'ordinateur, le compteur du programme est défini sur une adresse prédéfinie et qu'il ne fait que commencer à exécuter le code machine.

Sur la plupart des ordinateurs, cette opération "amorce". Ce processus initialise immédiatement les périphériques connus (comme, par exemple, un lecteur de disque). Une fois initialisé, le processus d'amorçage utilisera une séquence prédéfinie pour exploiter ces périphériques. En utilisant à nouveau le pilote de disque, le processus peut lire le code du premier secteur du disque dur, le placer dans un espace connu de la mémoire vive, puis accéder à cette adresse.

Ces séquences prédéfinies (le démarrage de la CPU, le chargement du disque) permettent aux programmeurs d’ajouter de plus en plus de code aux premières étapes du démarrage de la CPU, ce qui au fil du temps peut éventuellement lancer des programmes très sophistiqués. .

Dans le monde moderne, avec des périphériques sophistiqués, des architectures de processeur avancées et de vastes ressources (Go ou RAM, To de processeur et processeurs très rapides), le système d'exploitation peut prendre en charge des abstractions assez puissantes pour le développeur (processus multiples). , mémoire virtuelle, pilotes chargeables, etc.).

Mais pour un système simple, avec des ressources limitées, vous n'avez pas vraiment besoin de beaucoup pour un "OS".

Par exemple, de nombreux petits ordinateurs contrôleurs ont de très "petits" systèmes d’exploitation, et certains peuvent simplement être considérés comme un "moniteur", offrant peu plus qu’un accès facile à un port série (ou à un terminal ou à un écran LCD). afficher). Certes, un grand système d’exploitation n’est pas très utile dans ces conditions.

Mais considérez également quelque chose comme un système Forth classique. Ici, vous avez un système avec "OS", qui vous donne les E / S du disque, les E / S de la console, la gestion de la mémoire, ainsi que le langage de programmation actuel et un assembleur, ce qui correspond à moins de 8 Ko de mémoire sur. une machine 8 bits.

ou les vieux jours de CP / M avec son BIOS et son BDOS.

CP / M est un bon exemple d’un système d’exploitation simple comme couche d’abstraction permettant aux programmes portables de s’exécuter sur une vaste gamme de matériel, mais le système ne nécessitait pas moins de 8 Ko de RAM pour démarrer et s'exécuter. .

Loin des Mo de mémoire utilisés par les systèmes d’exploitation modernes. Mais, pour être juste, nous avons des Mo de mémoire, et nos vies sont BEAUCOUP BEAUCOUP plus simples (pour la plupart) et beaucoup plus fonctionnelles, à cause de cela.

Écrire un système d’exploitation est amusant car il est intéressant de faire imprimer le matériel "Hello World" transférer des données 1 octet à la fois par un port d’entrée / sortie obscur, ou les insérer dans une adresse de mémoire magique.

Procurez-vous un émulateur x86 et amenez un secteur de démarrage à prononcer votre nom. C'est un régal giggly.

En gros ... votre ordinateur peut simplement exécuter le disque car:

Le BIOS inclut ce périphérique de disque dans la séquence d'amorçage.

Au démarrage, le BIOS analyse tous les périphériques amorçables dans l'ordre, tels que le lecteur de disquette, le disque dur et le CD-ROM. Chaque périphérique accède à son support et recherche dans un emplacement codé en dur (généralement un secteur, sur un disque ou un lecteur CD) une empreinte qui identifie le support et indique l’emplacement auquel accéder sur le disque (ou le support) où les instructions commencent. Le BIOS demande au périphérique de déplacer sa tête (ou autre) à l'emplacement spécifié sur le support et de lire un grand nombre d'instructions. Le BIOS transmet ces instructions au processeur.

La CPU exécute ces instructions. Dans votre cas, ces instructions vont démarrer le système d’exploitation Ubuntu. Ils pourraient tout aussi bien être des instructions pour arrêter, ou pour ajouter 10 + 20, etc.

Généralement, un système d’exploitation commence par utiliser une grande quantité de mémoire (encore une fois, directement à partir du processeur, car les commandes de bibliothèque telles que "GlobalAlloc", etc. ne sont pas disponibles, car elles sont fournies par le système à venir. chargé-OS) et commence à créer des structures pour le système d'exploitation lui-même.

Un système d'exploitation fournit un ensemble de "fonctionnalités" pour les applications: gestion de la mémoire, système de fichiers, entrée / sortie, planification des tâches, mise en réseau, gestion des graphiques, accès aux imprimantes, etc. C’est ce que vous faites avant de «prendre le contrôle»: créer / démarrer tous les services pour que les applications ultérieures puissent s’exécuter ensemble, ne pas écraser la mémoire de l’autre, et disposer d’une belle API pour les services fournis par le système d’exploitation.

Chaque "fonctionnalité" fournie par le système d'exploitation est un sujet important. Un système d'exploitation les fournit toutes. Les applications doivent donc simplement se préoccuper d'appeler la bonne bibliothèque de systèmes d'exploitation. Le système d'exploitation gère les situations comme si deux programmes essayaient d'imprimer en même temps.

Par exemple, sans le système d'exploitation, chaque application devrait faire face à un autre programme essayant d'imprimer et "faire quelque chose" comme imprimer de toute façon, ou annuler l'autre travail, etc. À la place, seul le système d'exploitation a pour s'en occuper, les applications indiquent simplement au système d'exploitation "imprimer ces éléments" et le système d'exploitation garantit qu'une application est imprimée. Toutes les autres applications doivent simplement attendre que la première soit terminée ou que l'utilisateur l'annule.

La moindre quantité d'octets pour être un système d'exploitation n'a pas vraiment de sens, car un "système d'exploitation" pourrait impliquer beaucoup, ou très peu de fonctionnalités. Si tout ce que vous vouliez, c'était exécuter un programme à partir d’un CD, c’était très peu d’octets. Cependant, ce n'est pas un système d'exploitation. Le travail d'un système d'exploitation consiste à fournir des services (je les appelle des fonctionnalités) afin de permettre l'exécution de nombreux autres programmes et de gérer l'accès à ces services pour les programmes. C’est difficile, et plus vous ajoutez de ressources (réseaux, wifi, graveurs de CD, manettes de jeu, vidéo iSight, double moniteur, etc.) plus cela devient difficile.

L’un des projets les plus récents de système d’exploitation que j’ai vu apporter un soutien sérieux est un projet MS Research appelé Singularity , entièrement écrit en C # .NET.

Pour avoir une idée du temps que cela prend, il existe 2 développeurs principaux mais ils ont une douzaine d’internes à la fois, et il leur a encore fallu deux ans avant de pouvoir obtenir le système d’exploitation à un point tel démarrer et afficher des images BMP (c’est la façon dont ils utilisent leurs présentations). Il leur a fallu beaucoup de travail avant de pouvoir arriver à un point où il y aurait une ligne de commande (environ 4 ans).

En gros, il existe de nombreux arguments sur ce qu’un système d’exploitation est . Si tout le monde est d'accord sur ce qu'est un système d'exploitation (est-ce juste le noyau? Tout ce qui fonctionne en mode noyau? Le shell fait-il partie du système d'exploitation? X fait-il partie du système d'exploitation? Le navigateur Web fait-il partie du système d'exploitation?), Votre question est répondu! Sinon, il n'y a pas de réponse spécifique à votre question.

Vous voudrez peut-être obtenir le livre La conception et la mise en oeuvre du système d’exploitation FreeBSD pour une réponse très détaillée. Vous pouvez l'obtenir d'Amazon ou ce lien vers le site de FreeBSD.org ressemble au livre tel que je m'en souviens: texte du lien

Je ne peux pas croire que cela n’a pas été mentionné ... mais un livre classique offrant un aperçu de la conception du système d’exploitation est Systèmes d’exploitation - Conception et implémentation de Andrew S Tanenbaum, créateur de MINIX. De nombreux exemples du livre s’adressent aussi directement à MINIX.

Si vous souhaitez en savoir plus, OS Dev est un excellent point de départ. Surtout le wiki. Ce site regorge d'informations, ainsi que de développeurs qui écrivent des systèmes d'exploitation personnels pour un petit projet / passe-temps. C'est aussi une excellente ressource d'apprentissage, car de nombreuses personnes dans le même bateau que vous sur OSDev veulent apprendre ce qui se passe dans un système d'exploitation. Vous pourriez aussi finir par essayer vous-même!

le système d’exploitation (OS) est la couche de logiciel qui contrôle le matériel. Plus le matériel est simple, plus le système d'exploitation est simple, et inversement; -)

Si, à l’origine, les micro-ordinateurs, vous pouvez adapter le système d’exploitation à une mémoire ROM de 16 Ko et câbler la carte mère de manière à ce qu’elle commence à exécuter les instructions du code machine au début de l’espace adresse de la ROM. Ce processus de "démarrage" chargerait ensuite le code des pilotes pour les autres périphériques tels que le clavier, le moniteur, le lecteur de disquette, etc., et en quelques secondes votre machine serait démarrée et prête à être utilisée.

De nos jours ... même principe, mais du matériel de plus en plus complexe ;-)

Oh, c’est amusant. J'ai fait le tout à un moment ou à un autre et je suis passé par là pendant une grande partie de l'évolution.

En général, vous commencez à écrire un nouveau système d'exploitation en commençant petit. La chose la plus simple est un chargeur de démarrage, qui est un petit morceau de code qui extrait un morceau de code et l’exécute. Il était une fois, avec les ordinateurs Nova ou PDP, le chargeur de démarrage par le panneau avant: vous avez entré les instructions numéro hexadécimal par numéro hexadécimal. Le chargeur de démarrage lit ensuite un support en mémoire et configure le compteur de programme sur l'adresse de début de ce code.

Ce morceau de code charge habituellement autre chose, mais ce n’est pas obligé: vous pouvez écrire un programme destiné à fonctionner sur du métal nu. Ce type de programme fait quelque chose d’utile en soi.

Un vrai système d'exploitation est plus gros et contient plus de composants. vous devez charger des programmes, les mettre en mémoire et les exécuter; vous devez fournir du code pour exécuter les périphériques IO; à mesure qu'il s'agrandit, vous devez gérer la mémoire.

Si vous voulez vraiment savoir comment ça marche, trouvez les livres Xinu de Doug Comer , et Andy le tout dernier livre de système d'exploitation de Tannenbaum sur Minix .

Essayez Comment les ordinateurs démarrent , Le processus de démarrage du noyau et d'autres articles connexes du même blog pour un bref aperçu de ce qu’un ordinateur fait quand il s’amorce.

Que fait un ordinateur lorsque son démarrage dépend fortement (voire peut-être?) de de la conception de la CPU votre ordinateur fait quand il démarre.

Eh bien, il y a quelque chose qui relie le démarrage de la puce à un "bios", puis à un système d'exploitation, ce qui est généralement une tâche très compliquée effectuée par de nombreux services de code.

Si vous voulez vraiment en savoir plus à ce sujet, je vous recommanderais de lire un livre ... sur les microcontrôleurs, en particulier celui dans lequel vous créez un petit système d'exploitation en c pour un 8051 ou similaire ... ou apprenez l'assemblage de x86 et créez un très petit & "; système de chargeur de démarrage".

Un système d'exploitation est un programme, comme toute autre application que vous écrivez. L'objectif principal de ce programme est qu'il vous permet d'exécuter d'autres programmes. Les systèmes d’exploitation modernes exploitent le matériel moderne pour s’assurer que les programmes ne se heurtent pas les uns aux autres.

Si vous souhaitez écrire votre propre système d'exploitation, consultez ma propre question ici:

Comment se lancer dans le développement de systèmes d'exploitation

Vous demandez combien d'octets pouvez-vous mettre sur le disque et continuer à fonctionner en tant que système d'exploitation ? La réponse dépend de ce que vous attendez de votre système d'exploitation, mais le plus petit utile système que je connaisse rentre dans 1,7 mégaoctets. C’est un démarrage de la racine de Tom de Tom et c’est un très bon petit système d’exploitation avec le message "rescue "". applications qui s’adaptent sur une seule disquette . À l'époque où chaque machine avait un lecteur de disquette et que chaque machine ne disposait pas d'un lecteur de CD-ROM, je l'utilisais souvent.

Mon point de vue est que c’est comme votre propre vie.Au début, vous en savez très peu – juste assez pour vous entendre.Ceci est similaire à ce que propose le BIOS : il en sait suffisamment pour rechercher un lecteur de disque et en lire les informations.Ensuite, on en apprend un peu plus en allant à l’école primaire.C'est comme si le secteur de démarrage était lu en mémoire et recevait le contrôle.Ensuite, vous allez au lycée, ce qui équivaut au chargement du noyau du système d'exploitation.Ensuite, vous allez à l'université (pilotes et autres applications.) Bien sûr, c’est à ce moment-là que vous êtes susceptible de CRASH. IL IL.

En fin de compte, des couches de capacités de plus en plus nombreuses sont lentement chargées.Il n'y a rien de magique dans un système d'exploitation.

En lisant ici, vous aurez une idée de ce qu’il a fallu pour créer Linux. https://netfiles.uiuc.edu/rhasan/linux/

QNX est un autre très petit système d’exploitation qui tient sur un seul disque (la dernière fois que j’y ai jeté un coup d’œil, tout le système d’exploitation, avec une interface graphique, un navigateur Web, un accès au disque et un serveur Web intégré, tient sur un seul ordinateur. lecteur de disquette).

Je n’en ai pas beaucoup entendu parler depuis, mais comme il s’agit d’un système d’exploitation temps réel, il est conçu pour être très rapide.

En fait, certaines personnes visitent un collège de quatre ans pour se faire une idée approximative à ce sujet.

À la base, le système d’exploitation est extrêmement simple. Voici le guide du débutant sur CE QU’UN OS réussi doit être fait: 1. Gérez la CPU en utilisant un planificateur qui décide quel processus (instance en cours du programme) doit être planifié. 2. Gérez de la mémoire pour décider quels processus l’utiliseront pour stocker les instructions (code) et les données (variables). 3. Gérez les interfaces d'E / S telles que les lecteurs de disque, les alarmes, le clavier et la souris. Désormais, au-dessus de 3 exigences, des processus sont nécessaires pour communiquer (et non pour combattre!), Pour interagir avec le monde extérieur, pour aider les applications à faire ce qu’elles veulent. Pour en savoir plus, lisez le livre Dinosaur:)

Vous pouvez donc créer un système d'exploitation aussi petit que vous le souhaitez tant que vous parvenez à gérer toutes les ressources matérielles. Lorsque vous démarrez, le BIOS demande au processeur de commencer à lire le chargeur de démarrage (qui charge la première fonction du système d'exploitation résidant à une adresse fixe dans la mémoire - un peu comme main () du petit programme C). Ensuite, cela crée des fonctions, des processus, des threads et commence le big bang!

Premièrement, lire, lire et lire, qu'est-ce que l'OS? alors quels sont les usages / types / nature / objectif / besoins / des différents systèmes d'exploitation. Certains des liens sont les suivants: les débutants apprécieront les liens suivants:

Système d'exploitation moderne - cela donne Idée sur le système d’exploitation général.

Démarrage du système d'exploitation - Ceci donne les bases de ce qu’il faut vraiment pour créer un système d’exploitation, comment nous pouvons le créer et comment modifier par lui-même un code Open Source actuel.

Wiki OS - Donne une idée des différents systèmes d'exploitation utilisés dans différents domaines et utilisations (Objets / fonctionnalités du système d’exploitation.)

Voyons en général quel système d'exploitation contient (pas le sophistiqué Linux ou Windows)

Le système d'exploitation a besoin d'un processeur et pour y insérer un code, vous avez besoin d'un chargeur de démarrage . Le système d'exploitation doit avoir les objectifs à remplir et ces objectifs doivent être définis dans un wrapper appelé Kernel . À l'intérieur, vous pourriez avoir heure de planification et ISR (dépend de l'objectif et du système d'exploitation que vous devez créer)

Le développement d’OS est compliqué. Certains sites, comme osdev ou lowlevel.eu (allemand), sont consacrés à ce sujet. Il existe également des livres que d'autres ont déjà mentionnés.

Je ne peux pas m'empêcher de mentionner également le " Écrire votre propre système d'exploitation " série de vidéos sur youtube, car je suis celui qui l'a fait: -)

Voir

scroll top