Waar komt UNIX vandaan?

Groeten aan iedereen 🙂 deze weken heb ik me behoorlijk vermaakt met het lezen van enkele boeken over programmeren, de waarheid is dat de beste manier om te leren programmeren altijd is met een boek, elk artikel, tutorial, gids die je kunt vinden (inclusief de mijne) zijn slechts benchmarks bij het vergelijken met een echt boek over het onderwerp. Nu moeten we ook definiëren wat een "echt" boek is, aangezien niet alle boeken gewoonlijk goed zijn, en veel van hen kunnen zelfs meer kosten dan ze werkelijk waard zijn en tijd verspillen.

Door de jaren heen liepen de lijst met boeken die ik heb gelezen en de lijst met boeken die ik kan aanbevelen nogal uiteen, maar zonder twijfel hebben we bij enkele van mijn favorieten (in willekeurige volgorde):

  • CEH-gecertificeerde ethische hacker door Matt Walker.
  • Beginnen met Python: van beginner tot professional door Magnus Lie Hetland.
  • Hacken: de kunst van uitbuiting door Jon Erickson.
  • Aan de slag met Arduino door Massimo Banzi.
  • Leren van de bash Shell door Cameron Newbam & Bill Rosenblatt.
  • De vi- en vim-editors leren kennen door Arnold Robbins, Elbert Hannah en Linda Lamb.
  • Linux Kernel in een notendop door Greg Kroah-Hartman (ook een Gentoo-ontwikkelaar).
  • Modern C door Jens Gustedt
  • Het Shellcoder's Handbook door Chris Anley, John Heasman, Felix «FX» Linder & Gerardo Richarte.
  • De programmeertaal C door Brian W.Kernighan & Dennis M.Ritchie (makers van C)
  • Debuggen met GDB door Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux onthuld: Linux-beveiligingsgeheimen en -oplossingen van een grote groep ISECOM-onderzoekers, waaronder Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (een andere voormalige Gentoo-ontwikkelaar), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa , Pablo Endres, Richard Feist, Andrea Ghirardini, Julian "HammerJammer" Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti & et al.
  • Besturingssystemen: een concept-gebaseerde aanpak door Dhananjay M. Dhamdhere
  • Pro Git door Scott Chacon en Ben Straub
  • Expert C Programming: Deep secrets door Peter Van Der Linden.

Ik zou lovend kunnen zijn over elk van deze boeken, maar voor vandaag nemen we enkele passages van de laatste op de lijst, aangezien veel van deze anectodes me in de ban hebben gehouden en me hebben geholpen om enkele ingewikkelde geheimen van C en programmeren in het algemeen beter te begrijpen. 🙂

Unix en C

Als we het hebben over UNIX, is de geschiedenis verweven met de oorsprong van dit systeem en de ontwikkeling van de taal die tot op de dag van vandaag het meest wordt gebruikt bij de ontwikkeling ervan en zijn afgeleiden (inclusief Linux). En merkwaardig genoeg worden deze twee geboren uit een "fout".

Multitrics Het was een megaproject dat Bell Laboratories, General Electric en MIT zelf samenbracht om een ​​besturingssysteem te creëren, het systeem vertoonde veel fouten en een van de belangrijkste prestatiestoringen die het systeem praktisch onbruikbaar maakten. We hebben het over het jaar 1969, dus de hardware van die tijd kon niet de hoeveelheid software ondersteunen die nodig was om het systeem zelf te laten draaien.

Pas in 1970 begonnen een paar Bell-ingenieurs te werken aan een eenvoudig, snel en lichtgewicht besturingssysteem voor de PDP-7. Het hele systeem was geschreven in Assembler en was geroepen UNIX als een parodie op Multitrics omdat hij maar een paar dingen wilde doen, maar ze goed wilde doen in plaats van het enorme verspilde werk dat de tweede betekende. Nu begrijp je waarom Tijdperk begint op 1 januari 1970. 🙂 Een nogal merkwaardig feit voor mij. Op dat moment was er nog geen sprake van een C zelf, maar van een Nieuwe B omdat Ritchie's ideeën uit de reeds gebruikte B-taal van die tijd kwamen.

Vroege C.

In de loop van de jaren (1972-3) begon de term C te worden gebruikt toen de nieuwe taal vorm begon te krijgen, en rond deze tijd werd een ander merkwaardig feit geboren, veel grappen van programmeurs en programmeur zeggen:

Programmeurs weten dat je begint te tellen vanaf 0 in plaats van 1.

Nou, dit is niet helemaal waar 🙂 de echte reden waarom dit tot op de dag van vandaag zo wordt beschouwd, is dat het bij het maken ervan voor compilerschrijvers gemakkelijker was om een ​​array te berekenen met offset, deze geven de afstand aan die bestaat van een punt van oorsprong tot het gewenste doel, daarom:

array[8]=2;

Het vertelt ons dat het element van array wordt gedefinieerd als 2, omdat 8 eenheden aan de array worden toegevoegd om de geheugenruimte te bereiken waar element 2 zal worden opgeslagen.Vóór C begonnen veel talen te tellen vanaf 1, dankzij C, beginnen nu bijna allemaal met 0 🙂 het is dus niet de schuld van de programmeurs, maar van de compilerschrijvers dat dit zo is.

De Bourne Shell

Dit is een onderwerp dat, hoewel niet direct gerelateerd aan C, meer dan één kan helpen begrijpen waarom Shell-programmering zo vreemd is, en het is zeker nieuwsgierig om te weten. Steve Bourne schreef rond dat seizoen een compiler voor Algol-68, dit is een taal waarin de toetsen ( {} ) worden vervangen door woorden, dus we zouden het als volgt kunnen definiëren in C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Dit zijn slechts enkele voorbeelden van wat Algol begrijpt, maar als we het vandaag toepassen op shell-programmering, zult u begrijpen waarom uw programma's in de shell een fi voor elk if 🙂 zeker interessant.

Start met lezen

Ik kan je niet alle details van het boek vertellen, vooral omdat veel van dit al programmeeronderwerpen zijn die een voorafgaande achtergrond vereisen om te worden begrepen, maar ik dacht dat ik enkele van de merkwaardige anekdotes met je zou delen die ik onderweg tegenkwam 🙂 Ik heb niet gehad tijd om te werken aan enkele van de items die op de to-do-lijst stonden, want deze laatste paar boeken hebben me gewoon betrapt en ik geniet er elke dag van en ik probeer vooral ze ten volle te begrijpen. Groeten en binnenkort kan ik meer onderwerpen met jullie delen, groeten.


13 reacties, laat de jouwe achter

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   John zei

    Uw artikel is erg interessant voor mij geweest. Heel erg bedankt.

  2.   HO2Gi zei

    Zoals altijd erg interessant.

  3.   Jose Rafael zei

    Heel interessant, de verduidelijkingen zijn goed.

  4.   Alex zei

    Uitstekende staat

  5.   danielga zei

    Interessant !!! Heel erg bedankt.

  6.   tweede zei

    multrics? het zullen geen multics zijn (https://en.wikipedia.org/wiki/Multics)

    talen met indexen van 1 zijn een uitvinding van satan ...

    1.    Chris ADR zei

      Interessante opmerking 🙂 Ik veronderstel dat op een bepaald moment in de geschiedenis beide termen zijn gebruikt:

      https://www.landley.net/history/mirror/collate/unix.htm

      en blijkbaar hetzelfde boek dat in het midden van de jaren 90 is geschreven.

      Bedankt voor de opheldering 🙂 groeten

      1.    tweede zei

        wa, wat een raar ding, je hebt me aan het twijfelen gebracht, ik heb gekeken in een "gekocht" exemplaar van Expert C Programming: Deep secrets en er komen multics aan, het is de eerste keer dat ik die multrics hoor. Hoe merkwaardig, het doet een beetje denken aan het trix-konijn

        1.    Chris ADR zei

          hahaha zeker nieuwsgierig, ik heb mijn Engelse kopie van diepe geheimen gecontroleerd, daar staat ook Multrics (want je had me ook aan het twijfelen gebracht) ... misschien was het een uiting van de tijd 😛

          groeten

  7.   ED774 zei

    Geweldige bijdrage

  8.   anoniem zei

    Interessant, hoewel zeker, is Multrics te wijten aan een drukfout, aangezien de oorspronkelijke naam van dat besturingssysteem Multics was, en Unix oorspronkelijk Unics heette, precies verwijzend naar dat geweldige besturingssysteem, uiteindelijk en fonetisch gezien, Unics se omgevormd tot Unix, hoefde je nu alleen de naam te noemen van de persoon die zichzelf beschouwt als de auteur van Unix; Ken Thompson, volgens de legende waren zowel Thompson als Ritchie in de cafetaria van Bell Labs commentaar te leveren op hun projecten en het was dat Ritchie aan Thomposon voorstelde om zijn Unics te herschrijven met het C-programma, de taal die hij had geschreven ... en de rest , is geschiedenis. 😉

    Trouwens, voorheen werden alle programma's geschreven met de instructies van de machine, waardoor ze volledig afhankelijk waren van de hardware, de innovatie van C was, behalve dat het gemakkelijker werd om programma's te schrijven, dat de taal onafhankelijk was van de hardware die de software implementeerde. compilers, een filosofie die vele jaren later Java zou gebruiken, in de zin dat de programma's niet afhankelijk waren van het besturingssysteem, door de beroemde virtuele Java-machine toe te voegen.

    1.    Chris ADR zei

      Het slechte van legendes is dat ze de geschiedenis op meer dan één manier verdraaien ... en ze kunnen je laten denken dat er iets gebeurt als het niet ... zoals het feit van het bestaande gesprek tussen Thompson en Ritchie (dat ik naar believen heb weggelaten) omdat het leidt op historische en technische fouten (C was niet vóór UNIX) ...

      En wat betreft de tweede ... nog een legende die de werkelijkheid vervormt, want vóór C waren er B, A, pascal, Ada, algol-60, PL / 1 en nog een paar die behoorlijk programmeertalen waren (heel anders dan Assembly en hun dialecten door architectuur die afhankelijk zijn van de hardware van de processor) dus C 'innoveerde' niet in die zin, hij nam gewoon oplossingen aan die al in andere talen bestonden en uiteindelijk werd het sneller en beter populair dan deze ... Het enige deel De waarheid is dat Java gebaseerd was op dit concept van draagbaarheid om later zijn virtuele machine te creëren, maar hiervoor vertrouwde het niet alleen op C, maar het volgde ook andere modellen, anders zouden we het objectgeoriënteerde programmeerparadigma in Java niet hebben ...

      Ik vond dat ik de situatie moest verduidelijken omdat iedereen die minder goed thuis was het als waar kon beschouwen en dan kon geloven dat het zo gebeurde ... groeten 🙂

  9.   Ignatius Esquivel zei

    Zoals altijd is het artikel erg interessant, bedankt voor de bijdrage.