이 Youtube 영상을 보고 요약 정리했습니다.
1. 컴퓨터 구조를 알아야 하는 이유
개발자는 코드만 잘 짜면 되는거 아닌가? NO.
프로그래밍 언어 뿐 아니라 컴퓨터의 근간(컴퓨터의 구조, 운영체제)을 알아야 한다.
① 문제 해결 능력을 키울 수 있다.
똑같이 입력(같은 코드)했는데 실행이 안되요!
컴퓨터를 미지의 대상이 아니라 분석의 대상으로 바라볼 수 있다.
문법에 맞는 소스 코드를 컴퓨터에 입력만 하는 개발자 vs 컴퓨터를 관조하면서 문제를 해결할 수 있는 개발자
② 성능, 용량, 비용을 고려한 프로그래밍이 가능해진다.
사실 개발에서 가장 중요한 이야기 중 하나
컴퓨터를 고를 때 (무조건 저렴한 컴퓨터? 무조건 최신 컴퓨터? 단순한 접근은 안됨)
2. 컴퓨터 구조의 큰 그림
컴퓨터가 이해하는 정보
- 데이터 : 숫자, 문자, 이미지, 동영상 같은 정적인 정보. 컴퓨터와 주고 받는/내부에 저장된 정보를 데이터라 통칭하기도
- 명령어 : 컴퓨터는 결국 명령어를 처리하는 기계. 컴퓨터를 실질적으로 움직이는 정보. 데이터는 명령어를 위한 일종의 재료
컴퓨터의 네 가지 핵심 부품
- CPU :
- 메모리에 저장된 명령어를 읽어 들이고 해석하고 실행하는 부품이다.
- CPU 내부에는 ALU, 레지스터, 제어장치가 있다.
- ALU : 계산하는 장치
- 레지스터 : CPU 내부의 작은 저장장치. 임시 저장 장치
- 제어장치 : 제어 신호를 내보내고 명령어를 해석하는 장치
- 제어 신호 → 컴퓨터 부품을 관리하고 작동시키기 위한 전기 신호 (e.g. 메모리 읽기 신호, 메모리 쓰기 신호)
- 메모리 (RAM)
- 메모리는 실행되는 프로그램(=프로세스)의 명령어와 데이터를 저장한다.
- 프로그램이 실행되려면 메모리에 저장되어 있어야 한다.
- 메모리에 저장된 값의 위치는 주소로 알 수 있다.
- 보조기억장치 :
- RAM에 비해 비싸다. RAM은 전원이 꺼지면 저장된 내용을 잃는다.
- USB, 외장하드 등
- 전원이 꺼져도 보관될 프로그램을 저장하는 부품입니다.
- 입출력장치 :
- 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품이다. (마우스, 모니터 등)
메인보드 & (시스템) 버스
- 컴퓨터의 네 가지 핵심 부품은 모두 연결되어 있어야 하는데 이를 가능하게 만드는 것이 메인보드와 시스템 버스이다.
- 메인 보드에 연결된 부품은 버스를 통해 정보를 주고 받음
- 버스는 컴퓨터의 부품끼리 정보를 주고 받는 일종의 통로
- 다양한 종류의 버스가 있음
- 컴퓨터의 핵심 부품을 연결하는 버스는 시스템 버스
시스템 버스의 내부 구성
- 주소 버스 : 주소를 주고 받는 통로
- 데이터 버스 : 명령어와 데이터를 주고 받는 통로
- 제어 버스 : 제어 신호를 주고 받는 통로
3. 운영체제란?
(시스템) 자원
- 프로그램이 실행되기 위해 마땅히 필요한 요소
- 컴퓨터의 네 가지 핵심 부품 포함
운영 체제
- 자원(메모리)을 관리하는 특별한 프로그램
- 실행 중인 프로그램(=프로세스)을 관리하는 특별한 프로그램
- 운영 제체제는 메모리의 커널 영역에 적재 되서 실행된다.
- 운영체제는 사용자 영역에 적재되는 응용 프로그램을 관리한다.
4. 운영체제의 큰 그림
- 누가 메모리 사용자 영역에 프로그램을 적재했을까? → 운영체제가 했음
- 운영체제의 자원(메모리) 관리 → 페이징, 스와핑 개념 확장
- 어떤 프로세스를 먼저, 얼마나 오래 실행할까? → 여러 프로그램이 동시에 실행되는 것처럼 보임
- 많은 프로그램은 실행될 때 CPU 자원을 사용함. 누구부터 CPU를 이용하게 할지 결정하는 것이 운영체제
- 이렇게 맣은 프로그램들이 동시에 실행되는데, 누가 일목요연하게 실행을 관리해주지? → 운영체제
- 운영 체제의 프로세스 관리 (프로세스 동기화)
- 수 많은 프로세스들이 자원에 마구 직접 접근해도 괜찮을까? → 문지기 역할 (시스템 호출)을 통한 자원 보호
5. 운영체제를 알아야 하는 이유
- 운영체제는 사용자를 위한 프로그램이 아니다.
- 운영체제는 프로그램을 위한 프로그램이다.
- 내가 개발한 프로그램을 운영체제로부터 어떤 도움을 받을까?
- 문제 해결 능력 - 오류 메세지에 대한 깊은 이해
'TIL' 카테고리의 다른 글
[TIL] 정글 9주차 키워드 정리 (5) | 2024.11.12 |
---|---|
[TIL] LCS 알고리즘 (0) | 2024.09.29 |
[TIL] 그리디 알고리즘(탐욕법, Greedy Algorithm) (1) | 2024.09.28 |
[TIL] 다이나믹 프로그래밍(Dynamic Programming, DP) (0) | 2024.09.27 |
최소 신장 트리(Minimum Spanning Tree, MST) : 가장 경제적인 방식으로 모든 지점을 연결한다 (4) | 2024.09.25 |