2023년 여름, 혼공학습단 10기로 자바를 학습하면서 2023년 2학기 전공인 자바프로그래밍 수업을 예습했었습니다. 올 겨울에는 11기로 컴퓨터구조+운영체제를 공부하게 되었습니다.
전체적인 커리큘럼은 아래와 같습니다.
✍️ 기본 미션
p. 51의 확인문제 3번, p.65의 확인문제 3번 풀고 인증하기
p. 51 3번
p. 65 3번
✍️ 선택미션
p. 100의 스택과 큐의 개념을 정리하기
1) 스택
- LIFO (Last In First Out) 자료구조
- 나중에 저장된 데이터를 먼저 빼냄.
- PUSH 명령어로 데이터 저장, POP 명령어로 데이터 꺼냄.
2) 큐
- FIFO(First In First Out) 자료구조
- 한 쪽으로는 데이터 저장, 다른 한 쪽으로 데이터를 뺌.
🗒️내용 정리
Chap01.
1.1 컴퓨터구조를 알아야 하는 이유
- 문제 해결 능력이 향상됨.
- 성능/용량/비용을 고려한 개발이 가능해짐.
1.2 컴퓨터구조의 큰 그림
1) 컴퓨터가 이해하는 정보
- 데이터(data) : 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
- 명령어(instruction) : 데이터를 움직이고 컴퓨터를 작동시키는 정보
2) 컴퓨터의 네 가지 핵심 부품
: 중앙처리장치(CPU), 주기억장치(메모리), 보조기억장치, 입출력장치
(1) 메모리
- 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
- 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 한다.
- 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.
- 메모리에 저장된 값의 위치는 주소로 알 수 있다.
(2) CPU
- 메모리에 저장된 명령어를 읽어들이고, 읽어들인 명령어를 해석하고 실행하는 부품
- CPU 내부 구성 요소 중 가장 중요한 세 가지는 산술논리연산장치(ALU), 레지스터, 제어장치이다.
- ALU : 컴퓨터 내부에서 수행되는 대부분의 계산
- 레지스터 : CPU 내부의 작은 임시 저장장치
- 제어장치 : *제어신호를 내보내고 명령어를 해석하는 장치
* 제어신호 : 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호, 메모리 읽기/쓰기 신호
(3) 보조기억장치
- 메모리의 단점 : 저장용량이 적고, 전원이 꺼지면 저장된 내용을 잃음 -> 메모리를 보조할 장치인 보조기억장치
- 메모리보다 크기가 크고, 전원이 꺼져도 저장된 내용을 잃지 않음.
(4) 입출력 장치
- 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치
- 보조기억장치는 메모리를 보조하는, 특별한 기능을 수행하는 입출력 장치
(5) 메인보드와 시스템 버스
- 메인보드
- 메인보드에 컴퓨터의 핵심 부품이 연결됨.
- 메인보드에 연결된 부품들이 서로 정보를 주고받을 수 있는데, 메인보드 내에 버스라는 통로가 있기 때문이다.
- 시스템 버스
- 컴퓨터의 네 가지 핵심 부품을 연결하는 가장 중요한 버스
- 주소 버스, 데이터 버스, 제어 버스로 되어 있음.
- 주소 버스 : 주소를 주고받는 통로
- 데이터 버스 : 명령어와 데이터를 주고받는 통로
- 제어 버스 : 제어 신호를 주고받는 통로
Chap02. 데이터
2.1 0과 1로 숫자를 표현하는방법
1) 정보 단위
- 비트 : 0과 1을 나타내는 가장 작은 정보 단위
- 바이트 : 8비트
- 킬로바이트(KB) : 1000바이트
- 메가바이트(MB) : 1000킬로바이트
- 기가바이트(GB): 1000메가바이트
- 테라바이트(TB) : 1000기가바이트
* 워드(word) : CPU가 한 번에 처리할 수 있는 데이터 크기
2) 이진법
- 0과 1로 모든 숫자 표현
- 이진수 : 이진법으로 표현한 수, 아래첨자 (2)를 붙이거나 수 앞에 0b를 붙여 표현
ex) 1000(2) , 0b1000
3) 이진수의 음수 표현
- 2의 보수 표기법
- 2의 보수 : 어떤 수를 그보다 큰 2n에서 뺀 값
- 모든 0과 1을 뒤집고 1을 더해주면 된다.
- 컴퓨터 내부에서는 어떤 수를 다룰 때 플래그(flag)를 사용함.
4) 십육진법
- 수가 15를 넘어갈 때 자리 올림을 함.
- 아래첨자 (16)를 붙이거나 수 앞에 0x를 붙여 표현
ex) 1000(16) , 0x1000
5) 십육진수 <-> 이진수 변환
- 아래 포스팅 참고
https://0yeonjae2.tistory.com/entry/IT%EA%B0%9C%EB%A1%A0-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-2-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%91%9C%ED%98%84%EA%B3%BC-%EB%94%94%EC%A7%80%ED%84%B8-%EB%85%BC%EB%A6%AC
2.2 0과 1로 문자를 표현하는 방법
1) 문자 집합과 인코딩
- 문자 집합(character set) : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
- 문자 인코딩 : 문자를 0과 1로 변환
- 문자 디코딩 : 0과 1을 문자로 변환
2) 아스키코드
- 8비트 중 7비트를 사용하고, 한 비트는 패리티 비트(오류 검출용)로 사용 -> 128개의 문자 표현 가능
- 확장 아스키코드 : 아스키코드에 1비트 추가 -> 256개의 문자 표현 가능
3) EUC-KR
(1) 한글 인코딩 방식
- 완성형 인코딩 방식 : 초성, 중성, 종성의 조합으로 이루어진 한 글자에 고유한 코드 부여
- 조합형 인코딩 방식 : 초성, 중성, 종성 각각에 코드를 부여하고 이를 합쳐 한 글자 코드를 만듦.
(2) EUC-KR
- 완성형 인코딩 방식
- 한 글자에 2바이트 코드가 부여.
- 모든 한글을 표현할 수 없다는 문제 발생 -> CP949의 등장(이 역시도 한글 전체를 표현하진 못함.)
4) 유니코드와 UTF-8
- 유니코드 : 여러 나라의 문자를 광범위하게 표현할 수 있는 통일된 문자 집합
- UTF-8 : 1바이트~4바이트까지의 인코딩 결과를 만들어냄.
- 유니코드 문자에 부여된 값의 범위에 따라 바이트 수가 결정됨.
- 0~007F(16) : 1바이트
- 0080(16) ~ 07FF(16) : 2바이트
- 0800(16) ~ FFFF(16) : 3바이트
- 10000(16) ~ 10FFFF(16) : 4바이트
Chap03. 명령어
3.1 소스코드와 명령어
1) 고급 언어와 저급 언어
(1) 고급 언어
- 사람을 위한 언어
- ex) C, C++, Java, Python
(2) 저급 언어
- 컴퓨터가 직접 이해하고 실행할 수 있는 언어
- 고급 언어로 작성된 소스 코드가 실행되려면 반드시 저급 언어, 즉 명령어로 변환되어야 한다.
- ex) 기계어, 어셈블리어
- 기계어 : 0과 1의 명령어 비트로 이루어진 언어
- 어셈블리어 : 기계어를 읽기 편한 형태로 번역한 언어
2) 컴파일 언어와 인터프리터 언어
:고급 언어가 저급 언어로 변환되는 방법 : 컴파일 방식, 인터프리터 방식
(1) 컴파일 언어
- 컴파일 방식으로 작동하는 프로그래밍 언어
- 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- ex) C
- 목적 코드 : 컴파일러를 통해 저급 언어로 변환된 코드
- 소스 코드 내에 오류가 하나라도 있으면 컴파일 불가
(2) 인터프리터 언어
- 인터프리터 방식으로 작동하는 프로그래밍 언어
- 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
- 소스 코드 내에 오류를 만나기 전까지 올바르게 실행됨.
- 컴파일 언어보다 속도가 느림.
* 목적 파일과 실행 파일
- 목적 파일 : 목적 코드로 이루어진 파일
- 목적 코드가 실행 파일이 되기 위해서는 링킹 필요
3.2 명령어의 구조
1) 연산 코드와 오퍼랜드
- 명령어 = 연산 코드 + 오퍼랜드
- 연산 코드(operation code) : 연산자
- 오퍼랜드(operand) : 피연산자
- 명령어 내에서 연산 코드가 담긴느 영역을 연산코드 필드, 오퍼랜드가 담기는 영역을 오퍼랜드 필드라 함.
(1) 오퍼랜드
- 숫지나 문자와 같이 연산에 사용할 데이터를 직접 명시하기도 하지만, 많은 경우 데이터가 저장된 위치인 메모리 주소나 레지스터 이름이 담김. -> 오퍼랜드 필드를 주소 필드라고도 함.
- 오퍼랜드의 개수에 따라 명령어 구분 가능
- 0-주소 명령어
- 1-주소 명령어
- 2-주소 명령어
- 3-주소 명령어
(2) 연산 코드
- 기본적인 연산 코드 유형
- 데이터 전송 ex) MOVE, STORE, *LOAD(FETCH), PUSH, POP
- 산술/논리 연산 ex) ADD, SUBTRACT, MULTIPLY, DIVIDE, INCREMENT, DECREMENT, AND, OR, NOT,COMPARE
- 제어 흐름 변경 ex) JUMP, CONDITIONAL JUMP, HALT, CALL, RETURN
- 입출력 제어 ex) READ(INPUT), WRITE(OUTPUT), START IO, TEST IO
* 메모리에서 CPU로 데이터를 가져옴.
2) 주소 지정 방식
- 유효 주소 : 연산의 대상이 되는 데이터가 저장된 위치
- 주소 지정 방식 : 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
(1) 즉시 주소 지정 방식 (immediate adressing mode)
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
- 표현할 수 있는 데이터의 크기가 작아지는 단점이 있지만 속도가 빠름.
(2) 직접 주소 지정 방식 (direct addressing mode)
- 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
(3) 간접 주소 지정 방식 (indirect addressing mode)
- 유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식
- 두 번의 메모리 접근으로 인해 상대적으로 속도가 느림.
(4) 레지스터 주소 지정 방식 (register addressing mode)
- 직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저자한 레지스터를 오퍼랜드 필드에 직접 명시하는 방식
- 일반적으로 CPU 외부에 있는 메모리에 접근하는 것보다 레지스터에 접근하는 것이 속도가 더 빠름.
(5) 레지스터 간접 주소 지정 방식 (register indirect addressing mode)
- 연산에 사용할 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방식
🤔느낀 점
1~3 챕터 모두 전공이나 교양을 통해 한 번씩은 들어본 내용이 꽤 있어서 무난히 공부했습니다!
'독학 > [책] 컴퓨터구조 + 운영체제' 카테고리의 다른 글
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week6 (2) | 2024.02.05 |
---|---|
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week5 (0) | 2024.01.31 |
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week4 (0) | 2024.01.22 |
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week3 (0) | 2024.01.16 |
[혼공학습단 11기 혼공컴운💿] 컴퓨터구조+운영체제 week2 (4) | 2024.01.08 |