UNIX는 어디에서 왔습니까?

모두에게 인사드립니다  이번 주에 저는 프로그래밍에 관한 몇 권의 책을 읽는 것이 꽤 즐거웠습니다. 사실 프로그래밍을 배우는 가장 좋은 방법은 항상 책을 이용하는 것입니다. (저를 포함하여) 찾을 수 있는 모든 기사, 튜토리얼, 가이드는 단순한 것입니다. 해당 주제에 대한 실제 책과 비교할 때 참고할 점. 이제 우리는 "진짜" 책이 무엇인지 정의해야 합니다. 일반적으로 모든 책이 좋은 것은 아니며, 많은 책은 실제 가치보다 더 많은 비용이 들고 시간을 낭비할 수도 있기 때문입니다.

지난 몇 년 동안 내가 읽은 책 목록과 내가 추천 할 수있는 책 목록은 상당히 다양해졌지만 의심 할 여지없이 내가 좋아하는 책 중 일부는 특정 순서없이 다음과 같습니다.

  • CEH 인증 윤리 해커 (Matt Walker).
  • Python 시작 : Magnus Lie Hetland의 초보자에서 전문가로.
  • 해킹 : Jon Erickson의 착취 기술.
  • Massimo Banzi의 Arduino 시작하기.
  • Cameron Newbam과 Bill Rosenblatt의 bash Shell 학습.
  • Arnold Robbins, Elbert Hannah 및 Linda Lamb의 vi 및 vim 편집기 학습.
  • Linux Kernel in a Nutshell by Greg Kroah-Hartman (Gentoo 개발자도).
  • Jens Gustedt의 Modern C
  • Chris Anley, John Heasman, Felix«FX»Linder 및 Gerardo Richarte의 Shellcoder 핸드북.
  • Brian W. Kernighan 및 Dennis M. Ritchie (C 제작자)의 C 프로그래밍 언어
  • Richard Stallman, Roland Pesch, Stan Shebs 등의 GDB를 사용한 디버깅
  • 해킹 Linux 노출 : Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (다른 전 Gentoo 개발자), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa, Pablo Endres를 포함한 대규모 ISECOM 연구원 그룹의 Linux 보안 비밀 및 솔루션 , Richard Feist, Andrea Ghirardini, Julian "HammerJammer"Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti & et al.
  • 운영 체제 : Dhananjay M. Dhamdhere의 개념 기반 접근 방식
  • Scott Chacon 및 Ben Straub의 Pro Git
  • 전문가 C 프로그래밍 : Peter Van Der Linden의 깊은 비밀.

나는 이 책들 각각에 대해 열광할 수 있지만 오늘은 목록의 마지막 책에서 일부 구절을 선택하겠습니다. 왜냐하면 이 일화 중 많은 부분이 나를 사로잡았으며 C와 프로그래밍의 복잡한 비밀을 더 잘 이해하는 데 도움이 되었기 때문입니다.  일반.

Unix 및 C

UNIX에 대해 이야기 할 때 역사는이 시스템의 기원과 오늘날까지이 시스템과 그 파생물 (Linux 포함) 개발에 가장 많이 사용되는 언어의 개발과 얽혀 있습니다. 그리고 흥미롭게도이 두 가지는 "실수"에서 태어났습니다.

멀티트릭스 운영 체제를 만들기 위해 Bell Laboratories, General Electric 및 MIT 자체를 통합 한 메가 프로젝트였습니다. 시스템은 많은 오류를 발생 시켰으며 시스템을 실질적으로 사용할 수 없게 만든 가장 중요한 성능 오류 중 하나라고 말했습니다. 우리는 1969 년에 대해 이야기하고 있으므로 그 당시의 하드웨어는 시스템 자체를 실행하는 데 필요한 양의 소프트웨어를 지원할 수 없었습니다.

두 명의 Bell 엔지니어가 PDP-1970 용으로 간단하고 빠르며 가벼운 운영 체제를 개발하기 시작한 것은 7 년이 되어서야였습니다. 전체 시스템이 작성되었습니다 어셈블러 그리고 불렀다 UNIX 패러디로 멀티트릭스 그는 몇 가지 일만하고 싶었지만 두 번째가 의미하는 엄청난 낭비 작업 대신 잘하고 싶었 기 때문입니다. 이제 이유를 이해할 수 있습니다. 시대 1 월 XNUMX 일 시작 1970.  나에게는 다소 흥미로운 사실이다. 그 당시에는 C 자체에 대한 이야기가 아직 없었습니다. 새로운 B Ritchie의 아이디어는 당시 이미 사용 된 B 언어에서 나왔기 때문입니다.

초기 C

수년 (1972-3)에 걸쳐 새로운 언어가 형성되기 시작한 이래로 C라는 용어가 사용되기 시작했으며,이 무렵에 또 다른 흥미로운 사실이 탄생했습니다. 많은 프로그래머와 프로그래머 농담에서 다음과 같이 말합니다.

프로그래머는 0이 아닌 1부터 계산을 시작한다는 것을 알고 있습니다.

글쎄, 이것은 전적으로 사실이 아닙니다.  이것이 오늘날까지 그렇게 간주되는 실제 이유는 생성 시 컴파일러 작성자가 다음을 사용하여 배열을 계산하는 것이 더 쉬웠기 때문입니다. 오프셋, 이들은 원점에서 원하는 목표까지 존재하는 거리를 나타냅니다.

array[8]=2;

요소가 요소 2가 저장될 메모리 공간에 도달하기 위해 배열에 8개의 단위가 추가되기 때문에 배열의 수는 2로 정의됩니다. C 이전에는 많은 언어가 C 덕분에 1부터 세기 시작했지만 이제는 거의 모든 언어가 다음으로 시작합니다. 0  따라서 이것이 프로그래머의 잘못이 아니라 오히려 컴파일러 작성자의 잘못입니다.

본 쉘

이 주제는 C와 직접적으로 관련이 없지만 여러 사람이 쉘 프로그래밍이 왜 그렇게 특이한 지 이해하는 데 도움이 될 수 있으며, 확실히 알고 싶어하는 주제입니다. Steve Bourne은 그 시즌에 Algol-68 용 컴파일러를 작성했습니다.이 언어는 키 ( {} )는 단어로 대체되므로 C에서 다음과 같이 정의 할 수 있습니다.

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

이것들은 Algol이 이해하는 것의 몇 가지 예일뿐입니다.하지만 오늘날 쉘 프로그래밍에 적용하면 쉘에서 프로그램에 필요한 이유를 이해할 수 있습니다. fi 각각 if  정말 흥미롭습니다.

읽기 시작

특히 이들 중 많은 부분이 이미 사전 배경 지식이 필요한 프로그래밍 주제이기 때문에 책의 모든 세부 사항을 말할 수는 없지만, 그 과정에서 발견한 몇 가지 흥미로운 일화를 여러분과 공유하고 싶다고 생각했습니다.  할일 목록에 있는 일부 기사를 작업할 시간이 없었습니다. 이 최신 책들이 저를 사로잡고 매일 즐기고 있으며 무엇보다도 가능한 한 많이 이해하려고 노력하고 있기 때문입니다. 안녕하세요. 곧 더 많은 주제를 여러분과 공유할 수 있게 될 것입니다.