독학/컴퓨터구조 + 운영체제

[혼공학습단 11기 혼공컴운] 컴퓨터구조+운영체제 week1

최연재 2024. 1. 3. 08:37

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

 

[IT개론] 데이터 표현과 디지털 논리

내용 출처 : 소프트웨어 세상을 여는 컴퓨터과학 1. 수의 체계와 변환 1) 수의 체계 (1) 진법 : 사용할 수 있는 숫자의 개수와 각 숫자의 위치값을 정의한 수 체계 (2) 진법의 종류 : 10진법, 2진법, 8

0yeonjae2.tistory.com

 

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 챕터 모두 전공이나 교양을 통해 한 번씩은 들어본 내용이 꽤 있어서 무난히 공부했습니다!