지난 정리에 이어 1장 나머지 부분을 정리할 예정이다. 아마 총 4회로 나눠질 예정이다.
- 1단계
1. 쉘 프로그램에서 "./hello"를 입력한다.
2. 각 문제를 레지스터에 불러들인 후 main memory에 쉘에 작성돼있는 ".hello"를 저장한다.
- 2단계
1. 키보드에서 엔터를 누르면 쉘은 명령 입력 끝으로 안다.
2. 그러면 입력된 'hello'인 실행파일을 디스크에서 메인 메모리로 로딩한다.
3. 이 기법은 직접메모리접근(DMA)으로 데이터가 CPU를 거치지 않고 디스크에서 바로 메인 메모리로 이동한다.
- 3단계
1. hello 목적파일의 코드와 데이터가 메모리에 적재된 후, CPU는 hello 프로그램의 main 루틴의 기계어 인스트럭션을 실행하기 시작한다.
2. "hello, world\n" 문자열을 메모리로부터 레지스터 파일로 복사한다.
3. 그 후, 디스플레이 장치로 전송하여 화면에 글자들이 표시된다.
위의 프로그램 실행 과정을 보면, 정보를 한 곳에서 다른 곳으로 이동시키는 일에 많은 시간을 보낸다는 것이다.
캐시(캐시 메모리)라고 부르는 저장장치를 고안하여, 빠른 작업을 할 수 있도록 한다. 캐시에는 cpu가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장한다.
아래 저장장치 계층구조를 보면, 이해에 도움이 될 것이다.
여기서 프로그래머로서 알아야 할 가장 중요한 내용은, 캐시를 활용하여 자신의 프로그램 성능을 개선할 수도 있다는 점이다.
당연한 얘기일 수 있지만 저장 용량이 커질수록 속도는 느려지고, 용량 크기당 비용이 싸진다.
여기서 알아야 할 점은 계층구조 바로 위에 있는 저장장치는, 바로 아래의 저장장치의 캐시 메모리 역할을 한다는 점이다.
쉘 프로그램이 hello 프로그램을 로드하고 실행했을 때와 메시지를 출력할 때 프로그램은 키보드나 디스플레이, 디스크나 메인 메모리를 직접 엑세스하지 않고 운영체제(Operation System)가 제공하는 서비스를 활용한다. 운영체제는 아래 그림처럼 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층으로 생각할 수 있다. 응용프로그램이 하드웨어를 제어하려면 언제나 운영체제를 통해서 해야 한다.
운영체제는 아래 두 개의 주요 목적을 가진다.
- 제 멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막는다.
- 응용프로그램들이 단순하고 균일한 메커니즘을 활용하여 복잡하고, 매우 다른 저수준의 하드웨어 장치들을 조작할 수 있도록 도와준다.
(위 그림은 운영체제의 2가지 주요 목적을 추상화를 통해 달성하고 있다. Files는 입출력장치의 추상화 / Virtual memory는 입출력장치+메인메모리의 추상화 / Processes는 프로세서+메인메모리+입출력장치의 추상화 결과다.
+ 운영체제 중요한 내용이 많아 다음 포스팅에 이어서!
그럼 카카오톡 캐시데이터 지워요 말아요? ㅋㅋㅋㅋㅋㅋ 카톡용량 15기가입니다만,