컴퓨터구조 + 운영체제 시작

심화내용
github.com/kangtegong/self-learning-cs

1. 컴퓨터 구조 시작하기

1.1 컴퓨터 구조를 알아야하는 이유

처음 프로그래밍 배우면 뭘배우나? 프로그래밍 언어부터 배우는 경우가 많다.

개발자는 코드만 잘짜면되는거 같은데 왜 컴퓨터 구조를 알아야하나
프로그래밍 언어의 문법과 함께 컴퓨터의 근간을 알아야 좋은 코드를 작성할 수 있다.

문제해결능력, 성능용량등을 고려한 개발을 할 수 있다.

1.1.1 문제해결

코드를 똑같이 따라 작성해도 작동하지 않는다면 내 컴퓨터에선 되는데 남의 컴퓨터에서 안된다면?
문법상의 오류가 아니라 그 너머에 근원적인 것이 있다.

이를 위해서는 컴퓨터 내부를 알아볼 필요가 있는 것이다.
코드를 입력햇는데 왜 안되지 여기에서 멈추면 미지의 영역으로 이해한것이고
안으로 들어가면 분석의대상으로 가는 것이다.

미지의 대상이 아닌 분석의 대상으로 컴퓨터를 바라보아야 문제를 해결할 수 있다.

컴퓨터를 분석할 수 있는 개발자를 더 선호한다.

컴퓨터 구조를 알면 컴퓨터를 과조할 수 있는 능력을 기를 수 있다.
문법만 맞는 코드가 아니라 컴퓨터를 내려다보며 문제를 해결할 수 있는 개발자가 될 수 있다.

1.1.2 성능 용량 비용

성능 용량 비용을 고려할 수 있다. 처음엔 간과할 수 있지만 이를 간과해서는 안된다.
예를들어 웹사이트를 만들었을때 컴퓨터가 실행해야한다. 서버 컴퓨터는 가격 또한 천차만별 성능도 천차만별하다.
서버컴퓨터는 무조건 저렴하거나 무조건 최신이면 안되고 프로그램의 성능 용량 비용이 필요한지를 이해해야한다.

-> aws에서 내것을 배포햇을때 용량이 너무 부족해서 터지는 경우가 잇엇다.

컴퓨터 구조는 결국 성능 용량 비용에 대한 이야기이다.
구조를 학습하면 프로그래밍 언어의 문법만으로 해결할 수 없는 문제들을 해결하면서 고려하면서 개발할 수 있다.

1.2 컴퓨터 구조의 큰그림

컴퓨터 세세하게 이해하는 것보다 무엇을 배울지 큰 지도를 그려보자.
새로운 용어들이 많이 나올 수 있는데 암기할 필요는 없다. 나중에 이해하자.

컴퓨터 구조는 크게 두가지이다. 컴퓨터가 이해하는 정보 컴퓨터의 네가지 핵심부품이다.
컴퓨터가 이해하는 정보에는 데이터, 명령어가 있다.

1.2.1 컴퓨터가 이해하는 정보

1.데이터
숫자 문자 이미지 동영상과 같은 정적인정보
컴퓨터와 주고받는 내부에 저장된 정보를 데이터라 통칭하기도한다.
0과1로 숫자를 표현하는 방법, 0과1로 문자를 표현하는 방법을 알아볼 것이다.

2.명령어
컴퓨터는 결국 명령어를 처리하는 기계이다.
명령어는 컴퓨터를 실질적으로 움직이는 정보이다. 데이터는 명령어를 위한 일종의 재료이다.
명령어의 생김새와 동작방식에 대해서 학습할 것이다.

명령어는 1과 2를 더하라 안녕하세요를 출력하라 등 이런 단순한 것도 명령어이다.
1,2 안녕하세요는 데이터이다.

1.2.2 컴퓨터의 네가지 핵심부품

작은컴퓨터 스마트폰 노트북 서버컴퓨터 등 다양하게 존재한다.

핵심부품은 사실상 동일하다.
CPU 메모리(주기억장치 RAM, ROM) 보조기억장치 입출력장치

이 네가지 핵심부품이 서로 정보를 주고받기 위해 하나의 지점에서 모여있는데 이것을 메인보드(마더보드)라고 한다.
메인보드안의 시스템버스(척추)가 정보를 주고받게 한다.

1.2.2.1 메모리

현재 실행되는 명령어와 데이터를 저장하는 부품이다.
어떤 프로그램이 실행되기 위해서는 메모리에 저장되어야 한다.

그럼 실행되지 않은 것은 보조기억장치에 있다.

메모리에 저장된 값에 빠르고 효율적으로 접근하기 위해 '주소'라는 개념이 사용된다.
현실에서 우리가 주소로 원하는 위치에 찾아갈 수 있듯이 컴퓨터에서도 주소로 메모리 내 원하는 위치에 접근 할 수 있다.

내가 필요로하는 데이터 명령어가 어느 위치에 있는지 메모리를 통해 알 수 있다.

결론적으로
프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야한다.
메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.
메모리에 저장된 값의 위치는 주소로 알 수 있다.

1.2.2.2 CPU

CPU는 메모리에 저장된 명령어를 읽어들이고 해석하고 실행하는 부품이다. 컴퓨터의 두뇌라고 할 수 있다.
그래서 복잡하게 설계되어있다

CPU의 내부 구성 요소는 산술논리연산장치(ALU), 레지스터, 제어장치로 되어있다.

ALU는 쉽게 말하면 계산기이다. 산술연산하고 논리연산만을 위한 장치이다.
레지스터는 CPU내부의 작은 저장장치이다.
제어장친느 제어신호를 내보내고 명령어를 해석하는 장치이다. 제어신호는 컴퓨터의 부품을 관리하고 작동하기 위한 전기신호이다.
메모리 읽기 신호 메모리쓰기 신호 등등이 있다.

실제로 어떻게 실행하는지 간단하게 이해해보자.
1.제어장치가 1번지에 저장된 명령어를 읽기 위해 메모리에 메모리 읽기 제어 신호를 보낸다.

2.메모리는 1번지에 저장된 명령어를 CPU에 건네주고 명령어를 레지스터에 저장한다.
이 명령어로 3번지와 4번지에 저장된 데이터가 필요하다고 판단하고 메모리 읽기 제어신호를 보낸다.

3.그러면 메모리는 3번지와 4번지의 데이터를 CPU에 건네주고 서로다른 레지스터에 저장한다.
ALU는 읽어들인 데이터로 연산을 수행한다. 결과값을 레지스터에 저장한다. 계산이 끝나면 첫번째 명령어의 실행이 끝난다.

4.제어장치는 2번지에 저장된 다음 명령어를 읽어들이기 위해 메모리에 메모리읽기 제어신호를 보낸다.

5.다시 메모리가 레지스터에 저장하고 이 명령어를 해석하고 결과를 저장해야한다고 판단한다.

이런 과정을 거쳐서 실행된다.

정리하면
CPU는 메모리의 저장된 값을 읽어들이고 해석하고 실행하는 장치이다.
CPU내부에는 ALU 레지스터 제어장치가 있다.
ALU는 계산하는 장치 레지스터는 임시저장장치 제어장치는 제어 신호를 발생시키고 명령어를 해석하는 장치이다.

CPU는 매우 중요하다. 컴퓨터의 두뇌이기 때문이다.

1.2.2.3 보조기억장치

보조기억장치는 왜필요한가?
메모리는 비싸고 전원이 꺼지면 저장된 내용을 잃는다. 즉 휘발성 저장장치이다.
전원이 꺼저도 저장할 수 잇는 저장장치가 바로 보조기억장치이다.

메모리는 실행할 정보를 저장하고 보조기억장치는 보관할 정보를 저장한다.

1.2.2.4 입출력장치

컴퓨터 외부와 연결해서 내부의 정보를 교환할 수 있는 부품이다.
보조기억장치랑 입출력장치가 뭐가 다른가? 라고 물어보는 사람이 있다.
사실상 딱 잘라 구분되는 것은 아니다. 주고받는 양상은 비슷하다.
합쳐서 주변장치라고 통칭하기도 한다.

1.2.2.5 메인보드와 시스템 버스

위 네가지 것들을 연결해주는 것이 메인보드이다.
네가지를 연결하는 판떼기라고 이해하면된다. 메인보드에 연결된 부품들이 서로 정보를 주고받는데 이것을 버스라고한다.
정말 중요한 것 척추의 역할을 하는 것이 시스템 버스라고 한다.

메인보드에는 여러가지 슬롯과 연결단자가 있다. 이 연결된 부품들이 버스를 타고 정보를 주고받게 된다.

시스템 버스의 구성은
주소버스 주소를 주고받는 통로
데이터버스 명령어와 데이터를 주고받느 통로
제어버스 제어신호를 주고받는 통로이다.

이전의 예시를 들어보면 각 버스를 통해서 신호와 데이터를 주고받는다.

마무리
메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다.
CPU는 메모리에 젖아된 명령어를 읽어들이고 해석하고 실행하는 부품이다.
보조기억장치는 전원이 꺼져도 보관할 프로그램을 저장하는 부품이다.
입출력장치는 컴퓨터 외부와 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품이다.
시스템 버스는 컴퓨터의 네가지 핵심부품들이 서로 정볼르 주고받는 통로이다.

2023.08.24

성능용량비용을 고려하고 코드를 작성해본적이 없다.
무조건돌아가게만 설계를 했었다.
그런데 실제 설계를 할때도 메모리가 줄줄 새거나(웹소켓을 닫지않아서) 실제로 내 AWS서버의 CPU가 모자라서 프로그램이 터지는 경우도 있었다.
이럴때 가상메모리를 설정해서 해결하기도 했었는데..
컴퓨터 구조와 운영체제를 이해하면 확실히 더 좋은 결과가 나오지 않을까 싶다.
천천히 공부를 해보겠다.

생각해보면 원래 이런점들을 공부하고 프로그래밍을 공부했어야하는데 순서가 바뀐 것 같다.
취업이 안되는 지금 공고에 원서를 천천히 넣어가보며 이런점들을 쌓아가다보면
누군가는 알아봐주지 않을까
중요한 것은 꺾이지 않는 마음이다.

'개념정리 > 컴퓨터 구조 및 운영체제' 카테고리의 다른 글

2023.09.05 컴퓨터구조  (0) 2023.09.06
2023.09.01 컴퓨터구조  (0) 2023.09.02
2023.08.30 컴퓨터구조  (0) 2023.08.30
2023.08.26 컴퓨터구조  (0) 2023.08.27
2023.08.25 컴퓨터 구조  (0) 2023.08.26

+ Recent posts