one line of code at a time
컴퓨터 구조와 운영체제 50분만에 핵심 개념 정복하기 영상 정리 본문
1. 컴퓨터 구조를 알아야 하는 이유
개발자는 프로그래밍 언어, 그 언어의 문법 뿐만 아니라 컴퓨터의 근간을 알아야 한다.
컴퓨터의 근간을 알게 되면 2가지 효과를 얻을 수 있다. 첫 번째 문제 해결 능력과 둘째는 성능, 용량, 비용을 고려한 프로그래밍이 가능해진다.
클라우드 서비스를 사용할 때 CPU, 메모리, 저장용량을 선택해야 한다.
컴퓨터 구조는 결국 성능, 용량, 비용에 대한 이야기이다.
2. 컴퓨터 구조의 큰 그림
컴퓨터 구조에서는 크게 2가지 갈래를 배운다.
하나는 컴퓨터가 이해하는 (2가지) 정보이고, 다른 하나는 컴퓨터의 네 가지 핵심 부품이다.
컴퓨터가 이해하는 정보
모든 프로그램들은 결국 2가지 정보로 이루어져 있다. 데이터와 명령어이다.
컴퓨터가 이해하는 두 가지 정보 중 하나인 데이터
- 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
- 컴퓨터와 주고받는/내부에 저장된 정보를 데이터라 통칭하기도 한다
컴퓨터가 이해하는 두 가지 정보 중 다른 하나인 명령어
- 컴퓨터는 결국 명령어를 처리하는 기계이다
- 명령어는 컴퓨터를 실질적으로 움직이는 정보이다
- 데이터는 명령어를 위한 일종의 재료다
컴퓨터의 네 가지 핵심 부품
세상에는 다양한 종류의 컴퓨터가 있다. 아두이노나 라스베리 파이, 스마트폰, 노트북, 서버 컴퓨터 등.
컴퓨터의 종류를 막론하고 네 가지 핵심 부품이 있다.
컴퓨터의 네 가지 핵심 부품: CPU, 메모리, 보조기억장치, 입출력장치
네 가지 핵심 부품들이 정보를 주고받는데 이것들을 연결시키는 메인보드 (aka 판때기)와 정보를 주고받을 수 있는 통로인 시스템 버스가 있다.
메모리
CPU
보조기억장치
입출력장치
메모리
- 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다
- 프로그램이 실행되려면 메모리에 저장되어 있어야 한다
- 메모리에 저장된 값의 위치는 주소로 알 수 있다
CPU
- 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품이다
- CPU의 내부 구성으로는 ALU, 제어장치, 레지스터가 있다.
- ALU는 계산기라고 보면 된다. 계산을 위해서 존재하는 회로들의 모음을 ALU라고 한다.
- 레지스터는 CPU 내부의 작은 저장장치를 말한다.
- 제어장치는 제어 신호를 내보내고 명령어를 해석하는 장치다. 제어 신호는 컴퓨터 부품들을 관리하고 작동시키기 위한 전기 신호 (e.g. 메모리 읽기 신호, 메모리 쓰기 신호) 이다.
- CPU가 메모리에 있는 명령어를 실행하고 싶으면 우선 메모리를 읽어들여야 한다. CPU의 제어장치는 제어 신호를 메모리에 보내고 (신호를 보낼 때 시스템 버스를 통해 메모리에 보내게 된다), 메모리는 CPU의 (저장장치인) 레지스터로 명령어를 갖고 온다. 그러면 제어 장치는 이 명령어를 해석해서 데이터가 필요하다면 메모리 읽기 제어 신호를 보낸다. 그 데이터를 레지스터에 읽어들이면, ALU가 계산을 하게 된다. 그리고 그 결과를 레지스터에 저장한다. 그런 다음에 CPU의 제어장치는 메모리에 메모리 읽기 신호를 또 보내는데 만약 명령어가 "연산 결과를 저장하라"이면, 제어 장치는 메모리 쓰기 신호를 보내서 연산 결과를 메모리에 저장한다.
보조기억장치
- 메모리로 사용되는 RAM이라고 하는 하드웨어는 보조기억장치에 비해 비싸고, 전원이 꺼지면 저장된 내용을 잃는다. 휘발성 저장장치다.
- 실행되고 있는 프로그램의 명령어와 데이터는 RAM에 저장되어 있는데 전원이 꺼지면 저장된 내용을 잃어버린다. 이를 보완하기 위해서 보조기억장치가 생겼다.
- 즉, 보조기억장치는 전원이 꺼져도 남아 있어야 하 프로그램을 저장하는 부품이다. 보조기억장치는 저장 공간 또한 주기억장치보다 훨씬 크고 가격도 저렴하다.
입출력장치
- 입출력장치는 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품이다.
그리고 이러한 네 가지 부품을 담는 메인보드와 메인보드에 연결된 부품들이 정보를 주고받는 통로인 (시스템) 버스가 있다. 다양한 종류의 버스가 있는데 컴퓨터의 핵심 부품을 연결하는 버스는 시스템 버스이다.
시스템 버스의 내부 구성
시스템 버스는 크게 3가지로 이루어져 있는데 주소 버스, 데이터 버스, 제어 버스이다.
주소 버스는 주소를 주고받는 통로이다.
데이터 버스는 명령어와 데이터를 주고받는 통로이고,
제어 버스는 제어 신호를 주고받는 통로이다.
3. 운영체제란?
windows, android, macOS, iOS, Linux가 모두 운영체제이다.
운영체제를 이해하기 위해서는 (시스템) 자원이라는 용어를 알아야 한다. 자원은 프로그램이 실행되기 위해 마땅히 필요한 요소를 가리킨다. 컴퓨터의 네 가지 핵심 부품 또한 자원이라고 볼 수 있다.
운영체제는 자원을 관리하는 특별한 프로그램이자 실행 중인 프로그램을 관리하는 특별한 프로그램이다.
실행 중인 프로그램을 프로세스라고도 부른다. 따라서 운영체제는 프로세스를 관리하는 프로그램이다.
운영체제 또한 메모리에 저장되어 있다. 너무나 특별한 프로그램이라서 커널 영역이라고 하는 특별한 공간에 위치해서 실행된다. 일상생활에서 사용되는 응용 프로그램은 사용자 영역에 적재된다.
4. 운영체제의 큰 그림
운영체제는 자원(메모리)를 관리한다. 크롬을 실행하면, 크롬은 xxx번지의 메모리 주소에서 실행되고, 워드 파일은 yyy번지에 적재시켜야겠다 등을 운영체제에서 결정한다.
운영체제는 물리적인 메모리보다 크기가 큰 프로그램도 실행시켜준다. 어떻게 실행할 수 있지? 페이징과 스와핑이라는 개념을 공부하면 된다.
메모리에 있는 여러 프로세스들은 동시에 실행된다. 사실은 동시에 실행되는 것처럼 보이지만, 엄밀하게 말하면 아주 아주 빠르게 번갈아 가면서 실행되는 것이다. 프로그램이 실행되려면 CPU를 필요로 하는데 여러가지 프로그램들이 동시에 실행될 때 어떤 프로세스를 먼저, 얼마나 오래 실행하게 할까? 이것도 운영체제가 해준다. 운영체제는 CPU 관리 (CPU 스케줄링)도 한다.
또한 운영체제는 프로세스 관리도 해준다.
수많은 프로세스들이 실행이 되려면 자원이 필요한데 프로세스가 자원에 직접 접근해도 될까? 프로세스가 자원에 직접적으로 접근하지 못하도록 운영체제가 시스템 호출 (일종의 문지기 역할)을 통해 자원을 보호한다.
운영체제는 하드웨어와 응용 프로그램 사이에 위치한 프로그램이다.
5. 운영체제를 알아야 하는 이유
운영체제는 프로그램을 위한 프로그램이다.
그래서 프로그램을 만드는 개발자는 운영체제를 알아야 한다.
'개발공부' 카테고리의 다른 글
| Microservices with Spring Boot (Gateway, Discovery, Config server) (0) | 2024.08.11 |
|---|---|
| Docker Tutorial for Beginners 정리 (0) | 2024.08.09 |
| 혼자 공부하는 네트워크 저자 50분 특강 정리 (0) | 2024.08.07 |