
컴퓨터 공학을 배우면 운영체제, 컴퓨터구조, C언어를 배웁니다
각 개념을 따로 배우기 때문에 이게 왜 이러지? 이해가 안가는 부분이 생길 수 있습니다
컴퓨터의 전체적인 동작 과정을 이해하면 각 개념을 배울 때 조금이나마 쉽게 이해할 수 있을 것 같아 이번 글을 작성합니다
어느정도 운영체제, 컴퓨터시스템, C언어등 찍먹은 해봤다는 가정하에 설명합니다
개별적인 개념에 대한 설명은 생략하겠습니다
일반화로 틀린 부분이 있을 수도 있습니다
흐름만 이해해주세요
각 그림을 집중해서 키워드와 같이 하나하나 자세하게 봐주세요
운영체제나 컴퓨터 시스템을 배울 때 이런 구조를 볼 수 있습니다.



기본적인 컴퓨터 구조로
CPU, 메모리, I/O 장치들이 버스로 연결되어 있는 구조로 되어 있습니다.
버스 = 연결 통로
운영체제를 배우면 보는 그림입니다.


운영체제를 공부하면 프로세스에 대한 개념을 배웁니다.

참고
프로세서 : CPU (실제 하드웨어)
프로세스 : 추상화 개념
저장장치를 공부하면 이런 구조에 대해서 배울 수 있습니다.

포인터를 공부하면서 메모리의 구조를 배웁니다.

운영체제에서 가상 메모리를 배웁니다.

앞에 나열 된 그림과 개념을 보면서 서로 연관되거나 같이 사용되는 개념이 머리에서 그려지는지 생각해 봅시다
키워드와 위의 그림을 다시 보면서 서로의 관계를 이해해 보겠습니다
개념을 생각하고 그림을 참고해서 이해하면 좋겠습니다
C언어를 배울 때 보는 메모리와 프로세스를 배울 때 보는 메모리를 비교해 봅시다
-> 같은 형태를 가지고 있는 것을 볼 수 있습니다
참고
C 언어에서는 코드 흐름상 스택 먼저 썼다가 힙을 쓰지만,
운영체제 입장에서 보면 힙이 아래에서 위로,
스택은 위에서 아래로 커진다.
운영체제에서 가장 아래에 있는 하드웨어가 상세하게 어떤 구조로 되어 있는지 컴퓨터 하드웨어 구조를 통해 이해할 수 있습니다
컴퓨터 하드웨어를 공부하면서 메모리 계층 구조를 이해할 수 있습니다
-> 메모리 계층구조가 하드웨어에서는 어디에 위치하고 있는지
운영체제 그림에서 프로세스가 어디에 위치해 있는지 확인해 볼 수 있습니다
-> 또한 프로세스의 내부는 어떤 메모리 구조로 되어 있는지 볼 수 있습니다


그림을 보면 (관계를 집중해서 하나 하나 이해하면서)
참고 : 프로세스 안에 있는 메모리 구조는 가상 메모리 구조입니다.
이 그림을 통해 키워드와 개념을 이해해보면 좋겠습니다.
우리가 C언어를 배울 때 포인터가 메모리를 참조한다는 것은 프로세스 안에 있는 가상 메모리 주소를 참조한다는 것을 알 수 있다
이를 통해 hello.c같은 프로그램이 프로세스 안에서 실행되는 것을 알 수 있다.
프로세스 안에서 가상 메모리 주소를 참조하면 실제 하드웨어에서는
가상 메모리 주소 지정 -> MMU를 통해 실제 메모리 주소로 변환 -> 실제 메모리 주소에 저장 또는 읽기의 동작 과정을 이해할 수 있다.
3번의 과정을 통해 메모리를 읽을 때 메모리 계층 구조의 개념이 적용되서. 레지스터-> 캐시 -> 메모리 순으로 확인을 한다는 것을 확인할 수 있다.
| 계층 | 설명 |
|---|---|
| 하드웨어 | 실제 장치. CPU, RAM, HDD 등 |
| 운영체제(OS) | 하드웨어를 관리 + 사용자 프로그램 실행 환경 제공 |
| 프로세스 | 프로그램이 실행되면서 운영체제가 만들어준 실행 단위 |
| 가상 메모리 | 각 프로세스에 독립된 주소 공간을 제공 (보안 + 추상화) |
| C언어 | 이 위에서 돌아가는 고급 언어. 포인터는 이 가상 메모리를 참조 |
| MMU | 가상 주소를 실제 물리 주소로 바꿔주는 장치 |
| 메모리 계층 구조 | 레지스터, 캐시, RAM, 디스크로 이뤄진 속도-용량 tradeoff 구조 |
이해하고 다시 공부하면 좋은 것
각 개념을 정리하고 개념사이 관계를 이미지와 키워드를 통해 이해하고
이를 바탕으로 추가 내용의 개념을 이해하면 컴퓨터의 대한 구조가 쉽게 그려지고
쉽게 이해할 수 있다고 생각합니다.
결국 우리가 int* p = &x; 이렇게 C에서 쓰는 포인터는
“프로세스 안에 만들어진 가상 메모리 공간의 주소”를 참조하는 것,
이 주소는 실제 메모리 주소로 MMU에 의해 매핑.
그 뒤의 동작은 모두 운영체제가 해주는 일.