[CS:APP] 시스템 하드웨어 조직과 동작 (feat. hello 프로그램)

Laska·2025년 3월 16일
post-thumbnail

컴퓨터에서 hello 프로그램이 시작되는 과정

컴퓨터에서 hello프로그램이 동작하는 과정을 step별로 알아보자. 해당 과정에서는 컴파일이 된 후 실행파일인 hello 가 동작하는 것을 설명하였다.



STEP 1. hello 명령을 키보드가 읽어들이는 과정

먼저 키보드에서 hello 명령을 읽어들이는 과정이다.

linux> :\hell

USB Controller [ “hello” (타이핑) ] → CPU[ Register File { h, e, l, l, o } (각각의 문자 읽어들임) ] → Main Memory [ “hello” 저장 ]

해당 명령을 키보드에 입력하게 되면, 쉘 프로그램은 각각의 문자를 레지스터에 읽어 들인 후에 메인메모리에 저장하게 된다.

(⚠️이때 해당 명령을 지우고 다시 입력해도, 계속해서 해당 문자들을 레지스터에 읽어 들인 후에 메인메모리에 저장한다.)


STEP 2. 실행 파일을 디스크에서 메인 메모리로 로딩하는 과정

USB Controller [ enter ] → Shell (파일 내의 데이터, 코드 복사 인스트럭션 실행 )

명령 수행 :
Disk [ hello.exe ] → Main Memory [ 출력 : “hello, world\n” , 메인 인스트럭션 : hello CODE ]

이때 사용자가 키보드에 엔터(enter)를 누르게 된다면 쉘은 명령 입력을 끝마쳤다는 것을 인지하게 된다. 그러면 쉘은 파일 내의 코드와 데이터를 복사하는 일련의 인스트럭션을 실행하여, 실행파일 hello를 디스크에서 메모리에 로딩하게 된다.

데이터 부분은 최종적으로 출력되는 문자 스트링인 “hello, world\n”를 포함하게 된다.

그리고 직접 메모리 접근 이라고 알려진 기법을 통해 데이터는 프로세서를 거치지 않고 디스크에서 메인 메모리로 직접 이동한다.

직접 메모리 접근 방식 (DMA)

항상 모든 명령, 파일은 cpu레지스터를 거쳐 연산되고, 해당 연산을 거쳐서 메인메모리에 저장된다고한다.

즉, cpu는 생각이 가능해서 모든 명령을 내릴수 있는데, 회사와 같이 저 친구한테 무조건 모든걸 컨펌을 받아야하는것이다 !

근데 이 cpu를 왕따시키는 “메모리 직접 접근 방식” 이라는게 있음

메모리 직접 접근 방식으로 보조기억장치와 같은 저장장치메인메모리가 은밀히 소통한다…

이때 cpu는 아무것도 못하고 데이터가 저기로 가게됨.


(보조기억장치와 메인메모리가 은밀히 사내연애 하는것 같다는 생각이 들어서…)

(해당 방식을 아직 배우진 못했지만 키워드를 보고 동작과정을 배웠을 때 현재는 이렇게 이해했다.)



STEP 3. 출력 스트링을 메모리에서 화면으로 기록하는 과정

Main Memory [ hello CODE , (”hello,world\n”) ] → CPU(main루틴 기계어 인스트럭션 실행) → Graphics Adapter [ (”hello,world\n”)출력 ]


일단 hello 목적파일의 코드와 데이터가 메모리에 적재된 후, 프로세서는 hello 프로그램의 main 루틴의 기계어 인스트럭션을 실행하기 시작한다. 이 인스트럭션들은 “hello, world\n” 스트링을 메모리로 부터 레지스터 파일로 복사하게 된다. 거기로부터 디스플레이 장치로 전송하여 화면들이 글자로 표시하게 된다.

profile
똑똑해지고 싶어요

0개의 댓글