Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f811f01
ComputerSystem
eunseo9311 Dec 29, 2024
a48c64d
chore : [os] Create Computer System 정리
eunseo9311 Dec 29, 2024
df7e6cc
chore [OS] Computer System <1. 컴퓨터 구조 개론>
eunseo9311 Dec 29, 2024
055d272
chore [OS] Computer System 파일 정리
eunseo9311 Dec 29, 2024
19d6ef0
Merge branch 'eunseo/OS' of https://github.com/gdsc-ssu/2025-cs-study…
eunseo9311 Dec 29, 2024
b9f9fdf
chore [OS] Computer System <2. 컴퓨터 내부의 데이터표현>
eunseo9311 Dec 29, 2024
5a7cf12
chore [OS] Computer System <3. 논리 회로 기초>
eunseo9311 Dec 29, 2024
d5b4332
feat: [Computer architecture] 2장 정수표현
eunseo9311 Jan 2, 2025
bacddd0
docs: [Computer architecture] 파일 수정
eunseo9311 Jan 2, 2025
db8e204
feat: Computer architecture md 내용 추가
eunseo9311 Jan 2, 2025
7e22209
feat: Computer architechure 파일 구조 변경
eunseo9311 Jan 2, 2025
8f6a9a1
[Computer Architecture] 부동 소수점 내용 구체화
eunseo9311 Jan 6, 2025
c5e14a8
feat: [Computer Architecture] 3. 논리 회로 기초 파일 생성
eunseo9311 Jan 6, 2025
0d85373
feat: [Computer Architecture] 3. 논리 회로 기초 수정
eunseo9311 Jan 7, 2025
7c44592
feat: [Computer Architecture] 4.1 조합 논리 회로
eunseo9311 Jan 7, 2025
2a90a54
feat: [Computer Architecture] 4.2 논리식의 간소화
eunseo9311 Jan 7, 2025
0833c60
feat: [Computer Architecture] 2장 conflict 해결
eunseo9311 Jan 8, 2025
3dbc930
Merge branch 'main' into eunseo/OS
eunseo9311 Jan 8, 2025
a5f8454
Update 컴퓨터 구조 목차.md
eunseo9311 Jan 17, 2025
e24dae9
feat: [computerArchitecture] 1. 컴퓨터구조 시작하기
eunseo9311 Jan 18, 2025
b65cd03
Merge branch 'eunseo/OS' of https://github.com/gdsc-ssu/2025-cs-study…
eunseo9311 Jan 18, 2025
0800809
Feat: [computerArchitecture] 2. 데이터
eunseo9311 Jan 18, 2025
2c52868
Delete Computer architecture/3. 논리 회로 기초.md
eunseo9311 Jan 22, 2025
8a98d33
Delete Computer architecture/4. 조합 논리 회로.md
eunseo9311 Jan 22, 2025
fa1e604
feat: [computerArchitecture] 논리회로, 조합회로 수정
eunseo9311 Jan 26, 2025
bf8b542
feat: [computerArchitecture] 3. 명령어
eunseo9311 Jan 26, 2025
659cb8e
Delete Computer architecture/3. 논리 회로 기초.md
eunseo9311 Jan 28, 2025
ffef4d7
Delete Computer architecture/4. 조합 논리 회로.md
eunseo9311 Jan 28, 2025
ce0fc36
feat: [computerArchitecture] 4. CPU의 작동 원리
eunseo9311 Jan 28, 2025
cee1bea
feat: [computerArchitecture] 3. 논리 회로 기초
eunseo9311 Feb 6, 2025
c22180d
feat: [computerArchitecture] 4. 조합 논리 회로
eunseo9311 Feb 6, 2025
4ffab1c
[feat] computerArchitecture 5. CPU 향상 기법
eunseo9311 Feb 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
93 changes: 93 additions & 0 deletions Computer architecture/(책) 1. 컴퓨터 구조 시작하기.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# 컴퓨터 구조의 큰 그림

## 1. 컴퓨터 시스템의 구성 요소

컴퓨터 시스템은 크게 **하드웨어(Hardware)**와 **소프트웨어(Software)**로 나눌 수 있다.

### 하드웨어(Hardware)

중앙처리장치(CPU: Central Processing Unit)
컴퓨터의 두뇌 역할을 담당하며, 프로그램을 해석하고 명령을 실행함.
산술논리연산장치(ALU), 제어장치(Control Unit), 레지스터(Register) 등으로 구성.

- 메모리(Memory)
프로그램과 데이터를 저장하는 공간.
CPU가 명령을 빠르게 실행하기 위해 직접 접근하는 **주기억장치(메인 메모리)**가 핵심.
보조기억장치(HDD, SSD 등)는 대규모 데이터 영구 저장용.

- 입출력 장치(I/O Device)
사용자와 컴퓨터 간 상호작용에 필요한 장치들(키보드, 마우스, 모니터 등).

### 소프트웨어(Software)

시스템 소프트웨어와 응용 소프트웨어로 구분.
대표적인 시스템 소프트웨어인 **운영체제(OS: Operating System)**는 하드웨어와 사용자(또는 응용 프로그램) 간의 인터페이스 역할.
응용 소프트웨어는 특정 업무나 용도를 위해 사용자가 직접 사용하는 프로그램들(예: 워드 프로세서, 웹 브라우저 등).


## 2. 컴퓨터 작동 원리의 기초

컴퓨터는 기본적으로 폰 노이만(John von Neumann) 구조를 따른다.
이는 **프로그램 내장 방식(Stored Program Concept)**으로 프로그램과 데이터를 메모리에 저장해두고,
CPU가 순차적으로 명령을 가져와(인출 Fetch) 해석(Decode)하고 실행(Execute)하는 구조이다.

- 폰 노이만 구조의 핵심 특징

프로그램과 데이터를 동일한 메모리에 저장
CPU와 메모리, 입출력 장치 간을 버스로 연결
명령어를 순차적으로 처리(프로그램 카운터를 통해 다음 명령어 지시)

**CPU의 기본 동작 사이클**

1. 인출(Fetch): 메모리에 저장된 명령어를 CPU로 가져옴
2. 해석(Decode): 명령어를 해석하여 어떤 연산을 할지 결정
3. 실행(Execute): ALU 또는 다른 내부 구성요소를 동원해 실제 연산 수행
이 과정을 반복하며 프로그램 전체를 순차 실행

## 3. 운영체제의 역할과 기능

운영체제는 컴퓨터 자원을 효율적으로 관리하고,
사용자나 응용 프로그램이 하드웨어 자원을 편리하게 사용할 수 있도록 돕는 관리자이자 중간 매개체이다.

- 주요 기능

1. 프로세스 관리
프로그램을 실행 중인 상태(프로세스)를 관리하고 CPU 스케줄링 등을 통해 시스템 효율을 극대화한다.
2. 메모리 관리
프로세스가 필요한 메모리를 할당하고, 사용이 끝난 메모리를 회수하여 다른 프로세스가 사용하도록 한다.
3. 저장장치(파일) 관리
HDD, SSD 같은 보조기억장치에 데이터를 효율적으로 저장하고, 파일 시스템을 통해 쉽게 접근할 수 있도록 한다.
4. 입출력 관리
다양한 장치(키보드, 모니터, 프린터 등)로부터 데이터를 주고받는 과정을 제어하고 표준화된 인터페이스를 제공한다.
5. 보안 및 권한 관리
사용자 인증, 접근 권한 설정 등을 통해 시스템을 보호.
6. 사용자 인터페이스 제공
CLI(Command Line Interface)나 GUI(Graphical User Interface) 등을 제공해 사용자가 시스템과 상호작용할 수 있도록 한다.

- 운영체제의 종류 및 분류

단일 사용자 VS 다중 사용자 OS:
예) MS-DOS(단일 사용자), UNIX(다중 사용자)
단일 태스크 VS 멀티태스크 OS: 한 번에 하나의 작업만 가능한지, 동시에 여러 작업을 처리할 수 있는지에 따른 구분한다.
데스크톱 OS VS 서버 OS: 개인용 환경에 최적화된지, 기업 서버나 데이터센터 환경에 최적화된지에 따른 구분한다.
실시간 OS(RTOS): 주어진 시간 안에 특정 작업을 반드시 끝내야 하는 임베디드 환경에서 사용한다.

## 4. 시스템 소프트웨어와 응용 소프트웨어
운영체제 외에도 하드웨어를 효과적으로 다루기 위한 여러 시스템 소프트웨어가 있다.

- 컴파일러(Compiler), 어셈블러(Assembler), 인터프리터(Interpreter)
프로그래밍 언어로 작성된 코드를 기계어로 번역하거나(컴파일, 어셈블) 한 줄씩 실행(인터프리터)하도록 하는 프로그램들이다.

- 라이브러리 및 API
자주 사용되는 기능을 모아둔 코드 집합 또는 인터페이스.
개발자가 하드웨어/운영체제 레벨의 세부 사항을 몰라도 기능을 쉽게 이용할 수 있다.

- 응용 소프트웨어(Application Software)
사용자가 목적에 맞게 사용하는 프로그램들(웹 브라우저, 오피스 제품군, 게임 등)이다.

## 5. 1장의 핵심 정리

1. 컴퓨터 시스템은 하드웨어와 소프트웨어로 구성되며, 하드웨어는 CPU·메모리·입출력장치로 나눌 수 있다.
2. CPU는 메모리에 저장된 명령을 차례로 가져와 해석하고 실행하는 역할을 하며, 이 과정을 반복함으로써 프로그램이 동작한다.
3. 운영체제는 자원을 관리하고, 사용자 및 응용 소프트웨어가 하드웨어를 편리하게 사용할 수 있도록 돕는 역할을 한다.
4. 컴퓨터 구조와 운영체제는 서로 긴밀히 연결되어 있으므로, 두 영역을 함께 학습하면 전체적인 시스템 이해가 용이하다.
107 changes: 107 additions & 0 deletions Computer architecture/(책) 2. 데이터.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# 2. 디지털 기초와 컴퓨터가 데이터를 이해하는 방식

## 1. 컴퓨터가 숫자를 이해하는 방법: 진법(進法)

컴퓨터는 기본적으로 **2진법(Binary)**을 사용한다.
인간이 일상적으로 사용하는 **10진법(Decimal)**과 달리,
컴퓨터 내부에서는 전기가 ‘켜짐(1)’과 ‘꺼짐(0)’으로 표현되므로 2진수 방식이 자연스럽기 때문이다.

- 2진법(이진법)
0과 1 두 가지 숫자로 모든 데이터를 표현
예) 10진수 13 → 2진수 1101

- 10진법(십진법)
사람에게 익숙한 0~9까지의 숫자를 사용하는 체계
컴퓨터 내부보다는 주로 사람이 이해하는 표현 방식
8진법(Octal), 16진법(Hexadecimal)
2진수를 편리하게 묶어서 표현하는 방법

- 8진법: 2진수 3자리씩 묶음, 16진법: 2진수 4자리씩 묶음
16진법 예) 10진수 255 = 16진수 FF = 2진수 1111 1111

- 진법 간 변환
10진수 → 2진수: 나누기 2를 통해 몫과 나머지를 반복해서 구한 뒤 역순으로 읽음
2진수 → 10진수: 비트별 자릿수(2의 거듭제곱 값)를 합산

## 2. 숫자(정수와 실수)의 표현 방식

컴퓨터는 단순히 양의 정수(자연수)만 표현하는 것이 아니라, 음수나 실수까지도 표현해야 한다.
이를 위해 정수의 부호 표현 방식, 실수의 부동소수점 표현 등의 규칙이 생겼다.

### 정수 표현

- 부호와 크기(Sign-Magnitude) 방식
최상위 비트를 부호로 사용(0=양수, 1=음수), 나머지 비트로 값(크기)을 표현
예) 8비트 기준, +5는 00000101, -5는 10000101

- 1의 보수(1’s Complement)
양수는 그대로, 음수는 모든 비트를 반전시켜서 표현
예) 8비트 기준, +5는 00000101, -5는 11111010
사실 1의 보수는 많이 사용하는 방식은 아니라고 한다

- 2의 보수(2’s Complement)
1의 보수에 1을 더해 음수를 표현하는 방식
현재 가장 널리 사용되는 정수 표현 방법이다
예) 8비트 기준, +5는 00000101, -5는 11111011

- 오버플로(Overflow)
표현할 수 있는 범위를 넘어서는 경우가 발생
2의 보수 방식에서 양수 범위와 음수 범위를 어떻게 판정하는지 이해 필요
실수(부동소수점) 표현

- **고정소수점(Fixed Point)** 방식:
소수점 위치가 고정되어 있음
고정소수점에 대한 이야기는 2. 컴퓨터 내부의 데이터 표현에서 자세히 다뤘다

- **부동소수점(Floating Point)** 방식:
소수점이 움직일 수 있도록 지수(exponent)와 가수(mantissa)로 나눠 표현한다
부동소수점도 마찬가지로 2. 컴퓨터 내부의 데이터 표현에서 자세히 다뤘다

- IEEE 754 표준
단정도(32비트)와 배정도(64비트) 부동소수점 형식
(부호 비트, 지수, 가수)로 구성하며 지수에는 바이어서(특정 기준값 추가) 사용
부동소수점 연산 시 정밀도 손실(부동소수점 오차) 주의

## 3. 논리회로의 기초 개념
컴퓨터 내부는 전자회로로 구성되어 있으며, 0과 1의 신호를 해석하는 논리회로(Logic Circuit)가 핵심이다.
간단한 불(Boolean) 대수 원리에 따라 만들어진 논리 게이트를 이용해 다양한 연산을 처리한다.

- 불 대수(Boolean Algebra)

0과 1(참/거짓)에 대한 논리를 다룸
대표적 연산: AND(논리곱), OR(논리합), NOT(부정)
덧붙여 NAND, NOR, XOR, XNOR 같은 게이트도 존재

- 논리 게이트(Logical Gate)

AND 게이트: 입력이 모두 1이면 결과가 1, 아니면 0
OR 게이트: 입력 중 하나라도 1이면 결과가 1, 모두 0일 때만 0
NOT 게이트: 입력이 0이면 1, 1이면 0
NAND, NOR, XOR, XNOR는 위의 연산자들을 조합하여 만들어지는 게이트

## 4. 조합논리회로와 순차논리회로

간단한 논리 게이트를 조합해서 더 복잡한 기능을 수행하는 회로를 만들 수 있다.
컴퓨터의 연산 장치, 메모리, 제어 장치 등은 이러한 논리회로가 유기적으로 연결되어 구성된다.

### 조합논리회로(Combinational Circuit)

현재 입력만을 기준으로 즉시 출력을 결정한다
반가산기(Half Adder), 전가산기(Full Adder): 이진 덧셈 수행
디코더(Decoder): n비트 입력을 2^n개의 출력을 활용해 특정 회선을 활성화
멀티플렉서(Multiplexer): 여러 입력 중 선택 신호에 따라 하나만 출력으로 전달

### 순차논리회로(Sequential Circuit)

현재 입력뿐 아니라 **이전 상태(메모리)**도 함께 고려하여 출력을 결정한다
플립플롭(Flip-Flop): 1비트 정보를 저장하는 기본 회로 소자
레지스터(Register): 여러 개의 플립플롭을 묶어 여러 비트를 저장
카운터(Counter): 입력 신호(클록)를 받아 숫자를 세어 나가는 회로

## 5. 2장의 핵심 정리

1. 진법: 2진수, 8진수, 16진수의 표기는 컴퓨터에서 데이터를 직관적으로 표현하기 위해 중요
2. 정수 표현: 부호와 크기, 1의 보수, 2의 보수 중 실질적으로는 2의 보수가 가장 널리 쓰임
3. 실수 표현: 부동소수점(IEEE 754)은 지수와 가수로 나누어 표현하는데, 연산 시 정밀도 손실 가능성 존재
4. 논리회로 기초: 불 대수와 논리 게이트(AND, OR, NOT 등)의 조합으로 모든 디지털 연산을 처리
5. 조합회로 vs. 순차회로: 조합회로는 입력만으로 즉시 결과 도출, 순차회로는 이전 상태(메모리)도 고려
79 changes: 79 additions & 0 deletions Computer architecture/(책) 3. 명령어.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# 명령어

## 1. 소스 코드와 명령어

고급 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어이다
저급 언어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어이다

- 저급 언어

1. 기계어 → 0과 1로 이루어진 명령어
2. 어셈블리어 → 기계어를 사람이 읽기 편한 형태로 번역

- 고급언어가 저급언어로 변환되는 방법

1. 컴파일 방식 → 통번역 → 오류 있으면 컴파일 불가
2. 인터프리터 방식 → 실시간 통역 → N번째 오류, N-1번째까지 코드 수행됨

(여러 개의)목적 코드 → 링킹 → 하나의 실행 파일
모든 소스 코드는 컴퓨터 내부에서 명령어로 변환된다
고급 언어로 작성된 소스 코드가 실행되려면 반드시 저급언어(명령어)로 변환 되어야함

## 2. 명령어의 구조

**명령어 = 연산코드 + 오퍼랜드**

**연산코드와 오퍼랜드**

- 연산 코드(operation code) -> 명령어가 수행할 연산
오퍼랜드 필드에는 대부분 메모리나 레지스터의 이름이 담긴다
-> 주소 필드라 부르기도 함

연산 코드의 종류
1. 데이터 전송
LOAD(FETCH): 메모리에서 CPU로 데이터를 가져와라
PUSH: 스택에 데티터를 저장하라
POP: 스택의 최상단 데이터를 가져와라
2. 산술/논리 연산
3. 제어 흐름 변경
4. 입출력 제어

- 오퍼랜드(operand) -> 연산에 사용할 데이터 or 연산에 사용할 데이터가 저장된 위치를 명시
1. 오퍼랜드가 없는 경우 -> 0 주소 명령어
2. 오퍼랜드 1개 -> 1주소 명령어
3. 오퍼랜드 2개, 3개, 여러 개 -> 3주소 명령어

**주소 지정 방식**

왜 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 것일까?
그냥 연산코드에 사용할 데이터를 넣어도 되는거 아닌가?
-> 명령어의 길이 때문!!

주소가 담긴다면 표현할 수 있는 데이터의 크기
-> 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다

- 유효 주소(effectice address) -> 연산의 대상이 되는 데이터가 저장된 위치
- 주소 지정 방식(adressing mode)
-> 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용된 데이터 위치를 찾는 방법
-> 유효 주소를 찾는 방법
1. 즉시 주소 지정 방식(immediate addressing mode)
오퍼랜드 필드에 명시 -> 연산에 사용할 데이터
2. 직접 주소 지정 방식(direct addressing mode)
유효 주소(메모리 주소)
-> 유효 주소 표현 가능 범위: 연산 코드의 비트 수만큼 줄어든다
3. 간접 주소 지정 방식(indirect addressing mode)
유효 주소의 주소
-> 유효 주소 표현 가능 범위: 메모리 전체 2의 16승 만큼 표현 가능하다
4. 레지스터 주소 지정 방식(register addressing mode)
유효 주소(레지스터 이름)
-> 직접 주소 지정 방식과 비슷한 문제를 공유
5. 레지스터 간접 주소 지정 방식(register indirect addressing mode)
유효 주소를 저장한 레지스터

**스택과 큐**

- 스택(stack)
후입선출(LIFO) / PUSH, POP

- 큐(queue)
선입선출(FIFO)
Loading