1. 리치히가 유닉스 개발을 시작했다.
2. 그당시 모든 운영체제는 하드웨어를 직접 다루어야 하기에 어셈블리를 사용하는게 정설이었다. 하지만 어셈블리어는 각 하드웨어 마다 모두 틀려서 서로 다른 하드웨어에 대해 새롭게 운영체제 코드를 작성해야 했다.
3. 리치히는 포터블한 어셈블리어를 원했다.
4. 리치히는 어셈블리어에서 입출력을 제외한 부분을 추상화하여 C언어를 고안해내었다.
- C언어는 모든 어셈블리어(서로 다른 하드웨어용 어셈블리어) 가 표현할수 있는 로직을 논리적으로 표현할수 있어야 한다. 서로 다른 어셈블리어의 루프 방식을 for, while로 추상화하였고, 레코드 처리 방식을 struct 타입으로 추상화하였고, 서로다른 정수 처리 방식을 int 형으로 추상화하였다.메모리 조작방식을 포인터 연산으로 추상화하였다.
- 각기의 하드웨어는 입출력방식이 전혀다르다. 따라서 입출력 부분은 언어 명세에서 제외한다(리치히가 쓴 The c programming language 11장 참조). 이부분은 각 시스템에서 제공하는 시스템콜을 호출하거나, 어셈블리어로 작성된 라이브러리를 C에서 호출하는 형태로 구현한다. 즉 순수한 C 언어로는 단순한 문자하나도 출력할수 있는 방법이 없다. 단, 메모리 맵 IO 로 된 I/O에 대해 해당 메모리 직접 접근할수 있는 경우, 순수한 C 언어로 입출력이 가능하다. (예. ms-dos(x86 real-mode)에서는 표준출력모드에서 0xb800:0000 번지가 비디오 메모리로 매핑되어 여기에 값을 쓰면 ,실제로 글자가 화면에 바로 출력된다.)
좆내요짤
좋네요. 개추했습니다.
막짤이 ㅋ
내용과 짤 모두 알차군...
짤이 좋아서 추천합니다