
기본 컴퓨터구조
컴퓨터 시스템의 계층도이다. 보통 사용자가 보는 소프트웨어는 application programs이다. 이 프로그램이 직접 컴퓨터의 하드웨어 부분(메모리 등)을 조작하면 동시성 문제 등의 문제가 발생할 수 있다. 따라서 사용자 소프트웨어의 요청을 받고, 하드웨어를 조작해주는 프로그램을 operating system(운영체제)라고 한다.

하드웨어의 구성요소는 위와 같다.
입출력장치는 키보드, 마우스 등을 의미하고, 캐쉬는 메인메모리와 보조메모리 사이에 위치하는 하드웨어이다.
버스는 구성요소간의 데이터 전달의 기능을 수행한다.

나는 수업들을 때 이 cpu가 너무 헷갈렸다. 이를 이해하기 위해 컴퓨터구조를 전체적으로 살펴보자.

기본적으로 컴퓨터의 구조는 이렇게 생겼다.
메인보드 위에는 cpu와 메모리가 있다. cpu는 컴퓨터의 계산 기능을 수행하고, 메모리는 보조기억장치에 있는 데이터를 가져와서 저장하는 메모리가 있다.
보통 우리가 평소에 사용하는 언어로 메모리는 램이고, 보조기억장치는 ssd이다.
메모리는 휘발성이라 컴퓨터가 꺼지면 내용이 날아가고, 값이 비싸다.
보조기억장치는 메모리가 접근 가능하고, 컴퓨터를 꺼도 내용이 유지되고, 값이 싸다.
레지스터는 cpu 내부에 있어 ALU가 직접 접근 가능하다.
cpu 입장에서는 레지스터 , 메인메모리, 보조기억장치 순으로 접근이 쉽다.
그래서 어떤 명령어를 수행할 때 필요한 데이터가 레지스터에 없으면, 메인메모리에서 불러오고, 여기에도 없으면 보조기억장치에서 불러온다.

ALU는 쉽게 말해 계산기다. 계산만을 위해 존재하는 부품으로 컴퓨터 내부에서 수행되는 대부분의 계산은 ALU가 도맡아 수행한다.
레지스터는 CPU 내부의 작은 임시 저장 장치이다. 프로그램을 실행하는 데 필요한 값들을 임시로 저장하고, CPU 안에는 여러 개의 레지스터가 존재하고 각기 다른 이름과 역할을 가지고 있다.
제어장치는 제어 신호control signal라는 전기 신호를 내보내고 명령어를 해석하는 장치이다. 여기서 제어 신호란 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호다.

만약 위와 같은 명령어가 메모리에 있다고 하자. 이 때 제어장치는 명령어를 읽기 위해 메모리에 있는 데이터를 레지스터에 가져오는 제어신호를 보낸다.

제어장치는 가져온 명령어를 읽고, 필요한 데이터를 가져오는 제어신호를 보낸다.

데이터를 가져온 후 ALU는 레지스터의 값을 읽어 계산하고, 레지스터 내의 특정 위치에 정답을 저장한다.

다음으로 제어장치는 다음의 명령어를 읽고,

이해한 후 메모리에 레지스터 값을 저장하는 제어신호를 저장한다.
자 이걸 이해했으면 다시 보자

cpu의 주요 기능이다. 제어장치가 주로 하는 명령은 인출, 해독, 실행, 결과저장이다. 위 예시에서 전부 나왔다.
운영체제
운영체제는 하드웨어를 효율적으로 사용할 수 있도록 돕는 프로그램이다.
목적은 하드웨어 추상화, 시스템 인터페이스의 추상화이다. 여기서 추상화라는 개념이 헷갈릴 수 있는데 보통 공학에서 추상화란, 내부 프로세스를 전혀 몰라도 명령을 할 수 있도록 쉽게 구조적으로 만들어진 것을 의미한다.
예를들어 우리는 은행 앱에서 돈을 입금하는데 그 프로세스를 몰라도 버튼 하나로 입금할 수 있다.
이와 마찬가지로, 사용자 소프트웨어가 하드웨어 조작법을 몰라도 운영체제가 쉽게 다룰 수 있게 해준다는 의미이다.
운영체제의 관리 대상은 프로세스, 메모리, 입출력장치, 소프트웨어 자원(파일시스템, 라이브러리, 유틸리티)이다.
컴파일 과정

이런 hello.c가 있다고 하자

우리가 gcc -o hello hello.c 명령어로 컴파일러를 불러 실행파일 생성 명령을 하면 위와 같은 과정이 일어난다.
프리프로세서는 #include와 같은 전처리 지시문을 처리하고, 컴파일러는 어셈블리어 코드로 해석한다.
어셈블러는 어셈블리어 코드를 기계어로 번역하고, 링커는 여러개의 목적파일과 라이브러리 함수를 연결한다. 이렇게 하면 최종 실행파일이 생성된다.

이렇게 생성파일이 생성되고, 리눅스 쉘에서 실행파일 이름을 치면 실행되는 것을 볼 수 있다.

사용자가 hello 명령어를 입력하면 입력한 값이 cpu안에 들어가고, 메인메모리 내부에 있는 쉘이 명령어를 실행해야하기 때문에 메인메모리에 hello 명령어를 보낸다.

그리고 쉘은 이를 실행하기 위해서 보조메모리(디스크) 안에 있는 실행파일을 메인메모리로 가져온다.

그리고 쉘은 이를 읽고, hello world/n을 i/o bus를 통해서 Display에 출력한다.
출처
충남대 김형신교수님 시스템프로그래밍 강의자료
ESLAB | Home
Deep learning inference and training optimization for resource-constrained embedded systems
eslab.cnu.ac.kr
혼자 공부하는 컴퓨터 구조+운영체제 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
'CSE > 시스템프로그래밍' 카테고리의 다른 글
| [시스템프로그래밍] 실수의 표현 및 처리(1) (1) | 2025.10.21 |
|---|---|
| [시스템프로그래밍] 2장 정보의 표현 및 처리(정수의 표현) (1) | 2025.10.11 |
| [BombLab] 환경설정(맥북 사용자) (2) | 2024.10.06 |
| [BombLab] phase_6 해설 (2) | 2024.09.11 |
| [BombLab] phase_5 해설 (1) | 2024.09.10 |