❗️출처: 하이애나 블로그
37
쪽~ 64
쪽Linker에서
C에서 preproceser가 text바꿔주고, compiler가 assembly text를 만들어준다. 그리고 Assembler가 object파일(binary)만들어주면, Linker가 연결시켜줌
1.3 It Pays to Understand How Compilation Systems Work
CWE-119 오류
![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/56b4a76a-eedd-4a1c-9434-37a49a00b678/Untitled.png>)
메모리의 데이터 컨트롤 과정을 고려하는 프로그래머들이 극극소수이다
1.4 Processors Read and Interpret Instructions Stored in Memory
executable object file인 hello는 disk에 저장되어있다. 이걸 Unix에서 실행시키려면, shell이라는 응용프로그램에서 타이핑을 통해 실행 가능
첫 단어가 shell command가 아니라면? ⇒ 실행시킬 수 있는 파일로 인식
loads and run hello program을 하고, 끝날때 까지 기다린다.
1.4.1 Hardware Oraganization of a System
1.4.2 Running the hello Program
이렇게, 코드랑 hello 오브젝트 파일내의 데이터들이 메모리에 load되고나면, 프로세서는 hello프로그램의 코드들을 실행시키기 시작함. 이 경우, “hello, world\n”를메모리에서 레지스터로, 레지스터에서 디스플레이로 옮기는 일들을 하게 된다. (아래 그림 참조)
1.5 Caches Matter
프로그래머가 느끼기에 “real work”를 해야하는데, 이처럼 정보들을 옮기는 과정에서 시간이 많이걸린다고 느낄 수 있다.
대용량 장치는 느리고, 저용량장치는 빠를 수 밖에 없다. 그리고 빠른 장치는 만들때 비싸다.
디스크 드라이브의 어떤 장치가 1000배 더 크다면, 아마 프로세서보다 10,000,000배 느릴 것이다.
프로세서-디스크 속도차이가 이렇게 너무 많이나니까, 캐쉬를 디자인하게 되었다.
L1캐쉬는 10000 bytes holding가능하고, 레지스터만큼 빠르다
L2캐쉬는 100000 bytes holding 가능하고, 5배 더 느리다
L1, L2캐쉬는 SRAM(Static Random Access Memory)에 박혀있다.
이렇게 캐쉬들이 있어주기에, 프로그램 실행시 locality를 가져갈 수 있으므로 빠르게 작동한다.
1.6 Storage Devices Form a Hierarchy
메모리는 아래 그림과 같은 Hierarchy를 가지고 있다.
프로그래머는 캐쉬에 대한 지식을 활용해서 performance를 올릴 수 있어야 한다. 챕터6장에서 이에 대해 배운다.
1.7 The Operating System Manages the Hardware
우리가 hello program 돌릴 때, 키보드, 디스플레이, 디스크, 메인메모리.. 등등으로 직접적인 접근을 하는것이 아니다.
OS를 통해 접근하는 것이다
OS는 두가지 목적을 가지고 있다.
1.7.1 Processes
process는 OS가 프로그램을 돌리기 위해 추상회 해주는 것
멀티 프로세스는 동시에 여러 프로그램 돌려줌
유니프로세스는 코드를 싱글프로세스에서 돌림(1개만 작동)
OS가 새로운 프로세스를 동작시키려고 할 때, context switch를 수행한다.
processA, 쉘: 새로운 입력을 기다린다.
system call을 통해 processA의 context가 전달이 되고, processB(hello program)이 실행된다.
커널
1.7.2 Threads
1.7.3 Virtual Memory
가상화이다. 메인메모리를 쓰고있다는 착각을 줄 수 있는
프로세스는, virtual address space라는 방법으로 메모리를 본다(위의 사진)
위쪽에는 OS의 코드와 데이터를, 아래쪽에는 유저가 정의한 프로세스의 코드와 데이터를 가지고 있음
1.7.4 Files
1.8 Systems Communicate with Other Systems Using Networks
1.9 Important Themes
1.10 Summary