0829_csapp 1장
csapp ch.1
-
GCC 컴파일러 드라이버는 소스파일 hello.c를 읽어서 실행파일인 hello 로 번역한다. 번역은 4단계에 걸쳐 실행된다.
-
컴파일 시스템
- 전처리기 : 헤더파일을 프로그램 문장에 직접 삽입하라고 지시함. .i로 끝나는 새로운 C프로그램이 생성됨
- 컴파일러 : 어셈블리어 프로그램이 저장됨
- 어셈블러 : 바이너리 파일을 만듦
- 링커 : hello 프로그램이 printf 함수를 호출할때 표준 라이브러리에 있는 함수는 별도의 목적파일에 들어있기 때문에 기존 파일과 결합해야 함.
-
시스템의 하드웨어 구성
- 버스 (bus): 시스템 내를 관통하는 전기적 배선군
- 입출력 장치 : 키보드, 마우스, 디스플레이, 디스크드라이브. 시스템과 외부세계와의 연결을 담당함
- 메인메모리 : 프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장장치.
- 프로세서 : 메인메모리에 저장된 인스트럭션들을 해독(실행)하는 엔진 프로세서 중심에는 register라고 부르는 pc(program counter)가 있다. - 적재 : 메인메모리에서 레지스터로 복사 - 저장 : 레지스터에서 메인메모리로 복사 - 작업 : 레지스터값을 ALU로 복사, 이때 연산을 함 - 점프 : instruction set을 pc로 복사
-
캐시가 중요하다 디스크는 저렴하지만 느리기때문에 캐시를 디자인 하게 되었다. 개발자는 캐시를 이용해서 Performance를 올릴 수 있어야 한다.
-
운영체제는 하드웨어를 관리한다.
- hello program을 돌릴때 키보드, 디스플레이, 디스크, 메인메모리를 프로그램이 직접 access 하지 않음. 운영체제를 통해 접근함
- os의 목적
- 어플리케이션 돌릴때 잘못된 사용으로 하드웨어가 잘못되는것을 방지하기위해
- 응용프로그램들이 균일한 매커니즘을 사용해서 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해
-
프로세스
- os가 프로그램을 돌리기위해 추상화해줌
- 커널 : 프로세스에서 다른 프로세스로 갈떄 커널을 통해 관리됨 os 의 일부이며, 항상 메모리 안에 있음. 시스템이 프로세스들을 관리하기 위한 코드의 모음
-
쓰레드
- multiple threads →프로그램을 더 빠르게 돌릴 수 있게 해줌
-
가상메모리
- 메인메모리 전체를 독점적으로 사용하고 있는것 같은 환상을 제공하는 추상화
- 스택에는 함수 호출 인자들이 저장됨
- read/write data 에는 변수들이 저장됨
- heap에는 크기가 변동될 수 있는 배열 등이 저장됨
- shared libraries 에는 헤더나 라이브러리가 저장됨
-
파일
- 연속된 바이트들
-
시스템은 네트워크를 사용하여 다른 시스템과 통신한다.
-
중요한 주제들
-
amdahl 의 법칙
전체 시간의 60프로만 소모한 이 시스템의 일부분이 3배 빨라졌을때 속도 향상 = 1 / [0.4 + 0.6/3] = 1.67 전체 시스템을 빠르게 하기 위해서는 전체 시스템의 매우 큰 부분의 성능을 개선해야 한다.
- 동시성과 병렬성
- 동시성 = 다수의 동시에 벌어지는 일을 갖는 시스템에 관한 일반적인 개념
- 병렬성 = 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것
- 컴퓨터 시스템에서 추상화의 중요성
- api 는 추상화의 좋은 예시이다.
- 파일도 좋은 추상화, 프로세서에서의 추상화, os 레벨의 추상화
-
-
요약
- 하드웨어와 소프트웨어로 구성된 시스템이 우리 응용 프로그램을 잘 돌릴 수 있도록 해준다.
- 프로그램은 아스키 문자로 시작해서, 컴파일러와 링커에 의해 바이너리 실행파일들로 번역되는 방식
- 네트워크를 통해 다른곳과 소통하는것 = 다른 I/O디바이스와 소통하는것과 같다 = 네트워크는 단지 또다른 입출력 장치이다.
Leave a comment