우와 처음으로 Velog에 글을 써보네요 ㅎㅎ
저는 이번에 2학년 겨울방학 끝나기 전까지 뭘 해야할까 막막했었는데 교내 부트캠프나 프로젝트 등 할게 (해야할 것들임..) 많지만 이런거 할려면 또 공부를 추가적으로 해줘야했기 때문에 일단 공부부터 하렵니다😅
저의 지금까지 학점이 그렇게 높지도 낮지도 않지만 프로젝트를 하려니 이도 저도 아닌 실력과 수준인거 같아서 일단 배워왔던 것과 담 학기에 배울걸 미리 공부하는 차원에서 한빛아카데미의 혼자공부하는 컴퓨터구조+운영체제
책을 선택하게 되었어요.
말 그대로 '혼자 공부하는' 이고!
사실 컴퓨터 구조와 시스템 프로그래밍을 전공 수업에서 배웠었는데 아무리 컴구를 A+받아도 성적 받자마자 다 까먹어버리게 되더라구요 ㅋㅋㅋㅋ 이거 맞죠?
그래서 운영체제도 어차피 배울테니 이걸로 공부를 해야겠다고 다짐했습니당 ㅎㅁㅎ
그럼 이제 1-3chapter을 복기해보는 시간을 가지겠습니다~!
⚠ 아래 내용은 책 개념 + 제 머릿속 지식이 포함되어있습니다. ⚠
( 📢 수정할 내용이 있다면 알려주세요! )
자신이 여러 언어들을 다룰 줄 알고 코딩을 잘 한면 그것 만으로도 좋지만 추가적으로 컴퓨터구조를 이해하고 개발을 한다면 기존의 입출력단에 머물러있던 실력을 성능과 용량, 비용 여러 면을 고려해 개발하는 개발자
로 성장할 수 있다고 저자는 말합니다!
컴퓨터의 4가지 핵심 부품은
으로 이 부품들의 역할을 이해하고 있으면 컴퓨터의 작동 원리를 대부분 파악 가능하다고 합니다.
하.. 전공 공부하면서 항상 교수님이 띄우셨던 이 구조 그림중 하나가 나오네요🙄
CPU의 내부를 보면 크게 CPU 부
랑 메모리부
, 입출력장치 등 여러 것들을 서로 연결해주는 시스템 버스
가 있습니다.
메모리는 명령과 데이터가 저장되는 곳
입니다. 컴퓨터에서 프로그램이 실행되려면 반드시 이 메모리 부분에 데이터와 명령이 저장되어 있어야 합니다! 이때 필요한 명령, 데이터들을 가져오고 접근하기 위해 도입된 개념이 바로 주소(address)
이고 이를 통해 메모리의 위치를 표현합니다.
cpu는 메모리에 저장된 명령어를 읽고 해석하고 실행시키는데 관련 cpu의 내부 구성 요소들은 다음과 같습니다.
이 cpu 안의 요소들은 이렇게 3가지로 볼 수 있는데, ALU
와 register
, control unit
이 하는 일들은 위 설명 외에도 다양해요!😄
메인메모리(RAM/ROM)는 처리 속도가 빠르지만 용량이 작고 비싸고, 또 전원이 꺼지면 데이터가 날라가는 휘발성이 있어서 이에 보조기억장치가 추가적으로 존재합니다.
이에 주기억장치를 잠깐 작업할 때 사용되는 데이터를 넣어놓고 보조기억장치에 컴퓨터가 꺼진 후에도 사용할 수 있게끔 보관한다 생각하면 좋을거 같아요.
이 컴퓨터의 핵심 부품들은 모두 메인보드(마더보드)에 연결되고 이 부품들은 처음 사진의 여러 선들로 표현된 통로(버스)로 연결됩니다.
0과 1로 정보를 표현하는데 이를 나타내는 가장 작은 정보 단위가 bit
입니다.
추가적으로 0은 true, high 1은 flase, low 으로 이해할 수 있습니다. 1bit로는 0과 1을 표현할 수 있으니 2bit는 00,11,01,10 와 같이 나타낼 수 있고 n 비트로는 2^n 가지 정보가 표현 가능한거죠
바이트(byte)
는 8개의 비트를 묶은 단위이고 이외에도 킬로바이트(1000byte), 메가바이트(1000kB), 기가바이트(1000MB), 테라바이트(1000GB) 등의 단위가 있습니다.
추가적으로 워드(word)
단위도 있는데 이는 cpu가 한 번에 처리가능한 데이터의 크기로 1word는 cpu마다 다를 수 있습니다.
지금 알았는데 install 할 때 X32 CPU 나 X64 CPU 이런 문구들이 워드 크기를 나타내는 거였네요!🫢
수학에서 0과 1만으로 모든 수를 표현하는 방법이 이진법이라고 합니다. 이런건 간단간단 하지만 책에서는 자세히 설명해주네요!
예를들어 10이 십진수인지 이진수인지 헷갈릴 수 있으니 앞에 0b
를 붙여 표기시 이진수라고 나타내는 것과 이진수의 음수 표현!
이는 2의 보수 방법이 가장 널리 사용됩니다.
여기서 2의 보수를 사용했을 때 표현적 한계
가 존재하는데 0의 보수나 -8과 같은 2의 제곱수들에 대한 2의 보수가 그 예라고 볼 수 있을거 같아요!
추가적으로 16진수를 2진수로 혹은 그 역으로 변환하는 과정도 알면 좋을거 같아요.
0과 1로 문자를 표현하는 것과 관련된 용어가 바로 문자집합과 인코딩, 디코딩 입니다.
관련해서 '문자' 인코딩, 디코딩 개념이 있는데 여기에 아스키 코드랑 EUC-KR , 유니코드 등 다양히 존재합니다.
인코딩 관련해서 C 프로그래밍에서도 아스키 코드를 배웠었는데 다 까먹었었네요..
특히 EUC-KR관련 완성형/조합형 인코딩 방식에 대해 처음 알 수 있었습니다.
어셈블리어를 컴퓨터구조에서 처음 접했었는데 C언어나 Python도 처음 사용했을 때 신기했지만 어셈블리어는 뭐랄까... 진짜 기계같았습니다ㅋㅋㅋㅋ
이런 사람에게 이해하기 어려운 대신에 컴퓨터가 직접 이해하고 실행할 수 있는 언어가 '저급 언어'이고 이는 기계어
랑 어셈블리어
두 종류가 있습니다.
어셈블리어는 특히 기계어가 0과 1의 명령어 비트로 이뤄져있을 때 얘를 명령어처럼 번역한 언어라고 볼 수 있습니다.
아래의 사진이 어셈블리어로 작성한 예라고 할 수 있습니다.
학교 강의에서 공부할 때 썼던 노트인데 굉장히 복잡해보이네요;; 필기감 우짤
이런 저급 언어를 직접 작성하지 않고 우리는 보통 C언어같은 고급 언어로 소스 코드를 작성하고 컴파일러를 통해 컴파일 시켜 목적 코드를 만들죠!
이때 컴파일러와 달리 인터프리터는 소스 코드를 한 줄씩 번역해서 실행시켜주고 이런 방식을 사용하는 언어로는 Python이 있습니다.
C언어 쓰다가 Python을 썼을 때 이런 점이 너무... 좋았어요😂
(코드 작성할 때 오타나 오류가 많이 나오는 편이라 ㅎㅎ)
컴퓨터구조를 공부할 때 소스코드가 은근 많이 예제로 나오는데 이를 위해 알아야할 것이 바로 명령어와 관련된 개념입니다.
이 중에서도 책에서는 연산코드, 오퍼랜드, 주소 지정 방식의 개념을 설명해주는데요, 명령어는 연산코드(연산자)
와 오퍼랜드(피연산자)
로 구성되어있습니다.
여기서 연산코드는 명령어가 수행할 연산을, 오퍼랜드는 그 연산 결과를 저장할 위치의 개념입니다!
아까 위의 사진에서 lw나 add, sub이 연산 코드이고 우측의 내용들이 오퍼랜드죠.
근데 이 명령어들 옆에 인자가 각 명령어마다 개수가 다른걸 볼 수 있는데, 오퍼랜드가 없는 경우에서 3개의 오퍼랜드가 있는 경우까지 존재합니다. 이런걸 n-주소 명령어 라고 하네요!
이런 명령어의 오퍼랜드 필드에는 메모리나 register의 주소를 담는 경우가 많은데 이런 이유를 궁금해보았지는 않았지만 명령어의 길이 때문에 오퍼랜드 필드에 이들의 주소를 담는거라고 하네요.😯
이와 관련해서 CPU의 다양한 주소 지정 방식들이 있는데 제가 이걸 배웠었는 지 기억은 안 나는데 이참에 알고 가니 좋은거 같아요! bb
또 연산코드의 종류가 많은데 크게 데이터전송
, 산술/논리 연산
, 제어 흐름 변경
, 입출력 제어
4가지로 나눌 수 있습니다. 여기서 ALU랑 Control unit 등의 개념이 떠오르네요!🤔
p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기 p. 100의 스택과 큐의 개념을 정리하기
Q: 다음 설명의 빈칸에 들어갈 알맞은 내용을 써 보세요.
A: 메모리
메모리에 명령어랑 데이터를 저장해두고 가져오고 했었죠!
Q: 0b1101의 음수를 2의 보수 표현법으로 구해 보세요.
A: 0b0011
[ 1101 =(모든 0과 1을 뒤집어 줌)=> 0010 =(1을 더해 줌)=> 0011 ]의 과정을 거쳐 얻을 수 있습니다!
스택은 LIFO(Last-in First-out) 구조이고 큐는 FIFO(First-in First-out) 구조예요.
말그대로 스택은 후입선출, 큐는 선입선출의 원리로 데이터를 넣었다가 뺐다가 합니다. 이런 구조를 사용해서 데이터를 관리하는데, 이는 저장공간을 원활하게 관리하고 조금이라도 더 효율적으로 사용하기 위해 적합한 데이터 구조를 선택해서 사용한다고 전 생각해요!
여기까지 내용이 쓰다보니 굉장히 길어졌는데 다 기초적이라 주소참조 부분 외에 무난하게 읽었습니다. 근데 뒤에 가면 갈수록 복잡해지는데 걱정되네요...
운영체제 부분이 특히 기대가 됩니다! ㅏㅃ숑😉
ps.
컴퓨터구조를 공부하시는데 영어원문 lecture 책을 찾으시다면 다음을 추천🙃
한국어 교재를 찾으신다면 다음을 추천드립니다. 🙂
https://www.hanbit.co.kr/store/books/look.php?p_code=B9177037040