SangKins

[혼공컴운] 혼공학습단 11기 1주차 미션을 시작하면서 본문

Dev/혼공단

[혼공컴운] 혼공학습단 11기 1주차 미션을 시작하면서

holdbird 2024. 1. 4. 22:27

혼공컴운 11기에 선정되어서 그간 부족하다고 느껴졌던 CS와 OS의 개념을 정리해보고 싶어
혼자 공부하는 컴퓨터 구조 +  운영체제 책을 선택하게 되었습니다.

 

 

진작 공부할걸,라고 할 때 진짜 할걸
후회를 남기지 않으려 신청했다
 

혼자 공부하는 컴퓨터 구조+운영체제

어려운 컴퓨터 구조와 운영체제의 원리를 누구나 쉽게 이해할 수 있도록 용어와 개념은 한 번 더 풀어쓰고, 적절한 예시와 이해하기 쉬운 그림으로 재미있게 구성했다. 또한 일상 소재를 활용한

www.hanbit.co.kr

 

혼공학습단 11기의 커리큘럼은 다음과 같습니다.

✅혼자 공부하는 컴퓨터 구조+운영체제

#혼공학습단 #혼공 #혼공컴운

# 진도 기본 미션 선택 미션
1주차
(1/2 ~ 1/7)
Chapter 01 ~ 03 p. 51의 확인 문제 3번, p. 65의 확인 문제 3번 풀고 인증하기 p. 100의 스택과 큐의 개념을 정리하기
2주차
(1/8 ~ 1/14)
Chapter 04 ~ 05 p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기 Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기
3주차
(1/15 ~ 1/21)
Chapter 06 ~ 08 p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기 Ch.07(07-1) RAID의 정의와 종류를 간단히 정리해 보기
4주차
(1/22 ~ 1/28)
Chapter 09 ~ 11 p. 304의 확인 문제 1번 풀고 인증하기 Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
5주차
(1/29 ~ 2/4)
Chapter 12 ~ 13 p. 363의 확인 문제 1번 풀고 인증하기 Ch.12(12-1) 임계 구역, 상호 배제 개념을 정리하기
6주차
(2/5 ~ 2/12)
Chapter 14 ~ 15 p. 400의 확인 문제 1번 풀고 인증하기 Ch.14(14-3) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기

 

 

 

Chapter 1. 컴퓨터 구조 시작하기

목표 : 문제 해결 능력, 성능, 용량, 비용문제를 고려하여 개발할 수 있도록

 

컴퓨터의 언어 0과 1 이 단위를 bit(비트)라고 한다.

0과 1로 표현하는 정보 : 데이터, 명령어

 

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

 

픽사베이

 

컴퓨터는 주기억장치, CPU, 보조기억장치, 입출력장치, 메인보드, 시스템 버스 등으로 구성되어 있다.

 

1. 주기억 장치 

 

현재 실행되는 프로그램의 데이터와 명령어를 저장하는 부품

RAM(Random Access Memory)와 ROM(Read Only Memory)가 존재.

통상 RAM을 지칭한다.

 

2. 중앙처리장치

 

컴퓨터의 두뇌. 메모리에 저장된 명령어를 읽어 들이고, 해석, 실행하는 부품

 

- CPU 내부 구성 요소 중 3가지

- 1. ALU: 산술논리연산장치

- 2. 레지스터 : 프로그램을 실행하는데 필요한 값들을 임시로 저장하는 장치, 각기 다른 이름과 역할의 레지스터 존재

- 3. 제어장치(Control Unit) : 제어 신호를 내보내고 명령어를 해석하는 장치

 

3. 보조기억장치

 

메인메모리의 단점을 보완하는 용량이 크고, 전원이 OFF 돼도 내용을 잃지 않는 보조 메모리

 

메모리는 현재 실행중인 프로그램을 저장, 보조기억장치는 보관할 프로그램을 저장한다는 점에서 차이점을 가집니다.

 

4. 입출력장치

 

마우스, 스피커, 헤드셋같이 컴퓨터 외부와 연결되어서 컴퓨터 내부와 정보를 교환하는 장치를 말합니다.

 

5. 메인보드, 시스템 버스

 

컴퓨터의 핵심 부품들은 Main Board라고 부르는 판에 연결되는데. 메인보드에 있는 Bus라는 통로를 통해서 서로 정보를 주고받습니다.

핵심 부품이 정보를 주고받는 통로를 System Bus라고 합니다.

시스템 버스는 3가지 Bus로 이루어져 있는데 다음과 같습니다.

 

- 시스템 버스

- 1. 주소 버스(Address Bus) : 주소를 주고 받는 통로

- 2. 제어 버스(Control Bus) : 제어 신호를 주고받는 통로

- 3. 데이터 버스(Data Bus) : 명령어와 데이터를 주고 받는 통로

 

Chapter 2. 데이터

 

정보의 크기에 따라 표현 가능한 정보의 종류가 달라집니다.

- 1개의 비트는 {0,1} 2가지의 정보를 표현이 가능

- 2개의 비트는 0,0 - 0,1 - 1,1 - 1,0 4가지의 정보를 표현이 가능

- 3개의 비트는... 8가지의 정보가 표현 가능합니다.

 

2^1= 2개, 2^2 = 4개..... N비트 정보는  2N 개의 정보를 표현할 수 있다.

1바이트(byte) 8비트(8bit)
1킬로바이트(kB) 1,000바이트(1,000byte)
1메가바이트(MB) 1,000킬로바이트(1,000kB)
1기가바이트(GB) 1,000메가바이트(1,000MB)
1테라바이트(TB) 1,000기가바이트(1,000GB)

 

1 KiB = 1,024Byte.. MiB, GiB, TiB 단위가 다르다.

 

0과 1만으로 숫자를 표현하는 방법을 이진법이라고 합니다.

일상적으로 십진법을 사용하지만 컴퓨터에게는 이진법으로 알려주어야 합니다.

 

2진법으로 표현된 수가 음수인지 양수인지 어떻게 알 수 있을까요.

 

이진법으로 표현된 수의 음수 표현은 2의 보수를 구해 값을 음수로 간주하는 방법입니다.

이진수의 음수 표현 ( 2의 보수 (two's complement) )
1. n비트의 이진수를 각 비트마다 not 연산하기
2. 그 이진수에 1 더하기

 

2의 보수로 표현한 수의 음수와 양수는 플래그(flag)로 구분합니다.

 

2의 보수 표현의 한계
- 일반적인 방법이지만 완벽한 방식은 아니다.
- 0, 2^n 형태의 이진수에 2의 보수를 취하면 원하는 음수값을 얻을 수 없음.

 

이진법으로 숫자를 표현하다 보니 숫자의 길이가 너무 길어진다는 단점이 생겨 십육 진법을 사용하게 되었습니다.

 

십육 진법(hexadecimal): 15를 넘어가는 시점에 자리 올림. 0~9, A~F까지 사용.
이진수에 비해 더 많은 정보를 표현할 수 있게 되었습니다.

10진수보다 불편한 16진수를 사용하는 이유는 무엇일까요?

- 컴퓨터가 이해하는 이진법으로 변환하기 쉽기 때문입니다.

 

 

이렇게 0과 1로 이루어진 문자를 어떻게 이해하고 출력할까요?

 

우선 문자집합, 인코딩, 디코딩에 대해서 알아보겠습니다.

- 문자집합 : 컴퓨터가 인식할 수 있는 문자들의 모음

- 인코딩 : 컴퓨터가 이해할 수 있게 0과 1로 변환하는 과정

- 디코딩 : 0과 1로 표현된 문자 코드를 사람이 읽을 수 있게 변환하는 과정

 

 

아스키코드 :7비트로 표현됨 2^7, 총 128개의 문자를 표현할 수 있다.

EUC-KR : 한글 인코딩의 두 가지 방식 ( 완성형, 조합형) 중 완성형 인코딩 방식.

CP949 : EUC-KR의 확장버전

유니코드: EUC-KR 보다 다양한 한글을 포함, 표준 문자 집합. 

UFT-8(Unicode Transformation Format - 8bit): 가변 길이 유니코드 인코딩 방식
즉, 부여된 값의 범위에 따라서 1~4바이트로 표현 가능

 

Chapter 3.  명령어

- 소스 코드와 명령어

 

 모든 소스 코드는 컴퓨터 내부에서 명령어로 변환됩니다.

고급 언어에서 저급 언어로 변환된다는 것입니다.

 

고급 언어와 저급 언어
- 고급 언어: 사람이 이해하기 위해 만들어진 컴퓨터 언어
ex > 파이썬, 자바 등
- 저급 언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어
ex > 어셈블리어, 기계어

- 어셈블리어: 읽기 편한 형태의 저급 언어 (기계어를 읽기 편한 형태로 번역한 언어)

 

컴파일 언어와 인터프리터 언어

 

컴파일 언어: 컴파일 방식으로 작동하는 프로그래밍 언어
ex> c, c++...
- 컴파일 : 소스 코드 전체가 저급 언어로 변환 후 프로그램이 실행
- 컴파일러: 컴파일을 수행하는 도구

 

- 컴파일 과정
소스 파일 → 컴파일 → 오브젝트 파일


인터프리터 언어: 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 포로그래밍 언어
ex> 파이썬, Ruby...
- 인터프리터: 소스 코드를 한 줄 씩 저급 언어로 변환하여 실행하는 툴

 

이렇게 고급 언어가 저급 언어로 변환되는 대표적인 방법에는 두 가지가 있습니다.

 

- 명령어의 구조

 

연산코드와 오퍼랜드

 

오퍼랜드: 연산에 사용할 데이터 혹은 데이터가 저장된 위치. 피연산자라고도 함.
- 오퍼랜드 필드: 명령어에서 오퍼랜드가 저장되는 영역. 주소필드라고도 함.

오퍼랜드 필드의 개수에 따른 명령어 형식


- 0-주소 명령어: 오퍼랜드가 하나도 없는 명령어
- 1-주소 명령어: 오퍼랜드가 하나인 명령어
- 2-주소 명령어: 오퍼랜드가 두 개인 명령어
- 3-주소 명령어: 오퍼랜드가 세 개인 명령어

 연산코드: 명령어가 수행할 연산. 연산자라고도 함.

연산자의 유형


1. 데이터 전송 
2. 산술/논리 연산 
3. 제어 흐름 변경 
4. 입출력 제어 

주소 지정 방식

 

유효 주소: 연산의 대상이 되는 데이터가 저장된 위치로 즉시 주소 지정 방식으로 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식입니다


1. 데이터 표현 범위가 작아집니다.
2. 속도 빠름

직접 주소 지정 방식: 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식입니다.


1. 데이터 표현 범위 즉시 주소 지정 방식보다, 간접 주소 지정 방식보다
2. 속도 즉시 주소 지정 방식보다 느림

간접 주소 지정 방식: 오퍼랜드 필드에 유효 주소의 주소를 명시하는 방식입니다


1. 데이터 표현 범위가 큽니다(상대적으로)
2. 속도가 느립니다.

레지스터 주소 지정 방식: 오퍼랜드 필드에 연산에 사용할 데이터를 저장한 레지스터를 명시하는 방법입니다.


1. 데이터 표현 범위가 작습니다.(상대적)
2. CPU 내부 레지스터에 접근하는 방식으로 직접 주소 지정 방식 보다 빠릅니다.

레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장하고 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법입니다
1. 데이터 표현 범위가 큽니다.
2. CPU 내부 레지스터에 접근하는 방식으로 간접 주소 지정 방식 보다 빠릅니다.

 

주소 지정 방식에 따른 속도와 범위 차이
1. 속도

- 즉시 > 직접 > 간접 
2. 데이터 표현 범위 

-  간접 > 즉시 > 직접 

 

주소 지정 방식 속도 :  레지스터 > 메모리 (CPU에 가까운 레지스터)

 

 


 

프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 합니다.

 

1101(2)의 음수를 2의 보수 표현법으로 나타내면

0010 -> 0011 

즉 0011(2)로 나타낼 수 있습니다.


Stack, Queue 

- Stack 

1. 한쪽 끝이 막혀있는 통과 같은 저장 공간

2. 가장 밑에 있는 책을 빼내려면 가장 나중에 놓은 커피잔부터 치워야 책을 꺼낼 수 있다.

이러한 데이터 관리 방식을 LIFO(후입선출)이라고 한다.

 

정해진 방향으로만 자료를 쌓을 수 있다는 점, top은 가장 최근에 들어온 자료를 가리키고 있다.
새로 들어오는 자료는 top의 자료 위에 쌓이게 된다.
top위에 삽입하는 연산을 push, 삭제하는 연산을 pop이라고 한다.

 

- 개발자들의 사이트 Stack overflow의 이름은 Stack이 넘치는 경우 발생하는 오류로 사이트의 이름이 유래된 것이다.

 

사용사례 및 예시 (LIFO)

- 실행 취소 

- 브라우저 방문기록

- 후위 표기법 계산

 

 

https://pixabay.com/

 

- Queue 

1. 선입선출, 마치 편의점에서 진열하는 것과 같이 먼저 들어온 제품은 먼저 나가는 것 (FIFO)

2. 대기열과 같다고 생각하면 된다

3. 양쪽이 뚫려있는 저장공간

 


삽입 연산이 이루어지는 곳을 rear, 삭제연산이 진행되는 곳을 front
삽입연산을 enQueue, 삭제연산을 dnQueue라고 한다.

 

사용사례 및 예시 (LIFO)

- 프린터의 대기열

- 캐시 구현

- 고객 대기시간 관리

https://pixabay.com/