[혼공학습단 12기]혼자 공부하는 컴퓨터구조+운영체제 (1주차)

JAEHYEOK PARK·2024년 7월 7일
0

혼공학습단

목록 보기
1/7
post-thumbnail

컴퓨터 구조를 공부하는 이유?

1. 컴퓨터 구조는 컴퓨터로 작업을 할 때 문제해결에 큰 도움 - 분석이 용이해짐 
2. 성능 용량 비용을 고려하여 개발 가능

컴퓨터구조는 크게 2갈래로 구분

1. 컴퓨터가 이해하는 정보

  1. 데이터(컴퓨터가 이해하는 숫자 문자 이미지 등 정적인 정보)
  2. 명령어(데이터를 움직이고 컴퓨터 작동시키는 정보)

1.1 데이터

데이터는 컴퓨터가 이해하는 문자 이미지 등 정적인 정보이다.

정보 단위

0, 1 나타내는 가장 작은 정보 단위를 비트라고 함
n비트로 2^n 가지의 정보 나타낼 수 있음
이렇게 비트로 정보를 표현할 수 있지만 그 수가 커질 경우 불편하기 때문에 
바이트 메가바이트 기가바이트 테라바이트 등의 단위 사용 
?작은건, 워드

이진법

수학에서 0, 1로 모든 숫자를 표현하는 방법이다.
컴퓨터에게 숫자를 알려주려면 이진수로 알려 주어야 한다. 
이 때, 음수는 보수를 활용하여 표현한다. - flag를 사용하여 표기가 동일한 양수와 구분한다.

십육진법

이진법은 너무 길어질 소지가 있기 때문에 십육진법을 사용한다.

십육진수임을 구분하기 위해 아래첨자를 붙이거나 숫자 앞에 0x를 붙여 구분한다. (코드 상에서는 후자를 주로 이용한다.)

문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음

0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정은 문자 디코딩이라고 한다.
반대로 이해할 수 있는 문자-> 문자 코드는 인코딩이라고 한다.

아스키 코드는 초창기 문자 집합 중 하나로써 한 문자 당 8비트를 사용한다. 매우 간단하게 인코딩된다는 장점이 있지만 숫자, 기호, 알파벳 등만 표현 가능하고 한글 등 비영어권 표현이 불가능하다.
EUC-KR
완성형 디코딩 방식으로써 초성 중성 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여한다. (16비트) 이로써 2350개의 한글 단어 표한 가능하게 되었지만 여전히 표현할 수 없는 글자 등 한계가 존재했다.
유니코드
비단 한국 뿐만 아니라 전세계적 통일 문자 집합 필요성이 대두되었고, -> 유니코드 문자 집합이 도입되었다. -> 각 문자마다 고유한 값이 부여되는 방식이다.
유니코드는 인코딩 방식에 따라 UTF-8, UTF-16등등으로 구분한다.

1.2 명령어

컴퓨터는 c,c++,java,python등 high-level language를 이해하지 못한다. 그렇기 때문에 소스 코드가 실행되려면 반드시 컴파일, 인터프리트 등의 방식으로 low-level language로 변환하여 실행해야 한다. 이 low-level language는 2가지 종류가 있다.

1. 기계어
	0과 1 즉 이진수로 이루어진 언어이다.
    앞서 데이터 파트에서 언급했듯이, 이진법으로 표현할 경우 너무 길어질 소지가 있기 때문에
    십육진법으로 표현하기도 한다.
2. 어셈블리어
	어셈블리어란 위 기계어를 조금 더 읽기 편한 형태로 번역한 언어이다.
    
    각 줄이 명령어를 의미한다고 한다.
    임베디드개발, 게임개발, 정보보안 분야 등에선 어셈블리어를 아직도 많이 이용한다.

앞서 컴파일, 인터프리트 방식을 통해 high-level language를 low-level language로 convert한다고 하였다.

컴파일

    C등의 컴파일 언어를 컴파일러를 통해 저급 언어로 변환하여 실행될 때 이 변환과정을 컴파일이라고 한다. 이렇게 변환된 코드를 object code(목적 코드)라고 한다.
    특징: 오류가 하나라도 있으면 컴파일에 실패한다.

인터프리트

    python등의 인터프리터 언어를 사용하여 인터프리터로 소스 코드의 각 한 줄씩 저급 언어로 변환하여 실행하는 방식이다.
    특징: 소스 코드 전체를 저급 언어로 변환하는 시간을 기다릴 필요가 없고 오류가 있어도 해당 부분 이전 line까지는 실행이 가능하다. 일반적으로 한 줄씩 low-level language로 해석하며 실행해야 하기 때문에 컴파일 언어보다 느리다.
    
    그러나 현대의 많은 프로그래밍 언어들은 컴파일 언어와 인터프리터 언어 간의 경계가 모호해져서 반드시 둘 중 하나의 방식으로 실행되는것은 아니다.
    

명령어의 구조

기계어나 어셈블리어를 이루는 각각의 명령어는 구조
명령어는 operation code(연산 코드)와 operand(오퍼랜드)로 구성되어 있다.
operation code는 "명령어가 수행할 연산"을 뜻하고 - 연산자
operand는 "연산에 사용할 데이터가 저장된 위치"를 뜻한다. - 피연산자

자세히
operand
연산에 사용할 데이터, 혹은 이 데이터의 위치를 의미한다.
오퍼랜드 필드에는 숫자, 문자같이 연산에 상요할 데이터를 직접 명시하기보다 연산에 사용할 데이터가 저장된 위치(메모리 주소, 레지스터 이름 등)가 담긴다. 위와 같은 이유로 operand field를 주소 필드라고 부르기도 한다. 이 operand는 명령어 안에 0~개의 값을 가지게 되는데 operand값이 0개인 명령어를 0-주소 명령어,1개는 1-주소명령어.. 꼴을 가지게 된다.
주소 지정 방식
	명령어의 operand field에는 데이터가 저장된 위치를 담는 방법들
    1. 즉시 주소 지정 방식 - 사용할 데이터를 직접 명시
    2. 직접 주소 지정 방식 - 유효 주소를 직접적으로 명시
    3. 간접 주소 지정 방식 - 유효 주소의 주소를 명시
    4. 레지스터 주소 지정 방식 - 사용할 데이터를 저장한 레지스터를 직접 명시
    5. 레지스터 간접 주소 지정 방식 - 사용할를 데이터 메모리에 저장하고 그 주소를 저장한 레지스터를 직접 명시

operation code
크게 4가지 유형
//but 명령어 종류, 생김새는 cpu마다 다르다.
1. 데이터 전송
2. 산술/논리 연산
3. 제어 흐름 변경
4. 입출력 제어

2. 컴퓨터의 네 가지 핵심 부품

1. cpu
2. 주기억장치(메모리 ram, rom)
3. 보조기억장치
4. 입출력장치

1. cpu

메모리 저장된 명령어 읽고 처리하는 기능
alu 레지스터 제어장치 등(메모리 읽기, 메모리 쓰기 제어신호)

2. 주기억장치(메모리 ram, rom)

현재 실행되는 프로그램 명령어 데이터 저장 - 빠른 실행 위해 address 개념
프로그램 실행위해 메모리에 저장 반드시필요
메모리 현재실행프로그램 명령어 데이터 저장
메모리 저장값은 주소로 알기

3. 보조기억장치

주기억장치는 가격이 비싸고 데이터가 휘발성
이를 보완함

4. 입출력장치

마이크 스피커 프린터 마우스 등 컴퓨터 외부와 연결하여 io정보를 교환하는 장치 

//메인보드 기준의 그림

마더보드와 시스템 버스 - 주소버스 데이터버스 제어버스 제어장치가 가각에 맞게 신호를 보내게 된다.

숙제

51p 3번

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

65p 3번

1101 ->(보수 꼴 취하기)-> 0010 ->(1더하기)-> 0011

100p 스택과 큐 정리

둘 모두 데이터를 저장하는 자료구조로써 처리 방식에서 차이점을 지닌다.

스택:

stack이라는 말 그대로 차곡차곡 데이터를쌓고 그 데이터셋을 처리할 때 데이터셋의 top부터 빼내어 처리하는 LIFO(Last In First Out)방식이라고 한다.

큐:

queue는 시간 순으로 먼저 들어온 데이터가 먼저 처리되는 데이터 구조이다. FIFO(First In First Out)라고도 한다.

1주차 후기: velog를 활용해 정리하는건 처음이라 느낌이 어색했다. 여러 모로 미흡한 것 같아 2주차 이후부터는 데이터 처리 방식의 flow graph를 그려서 첨부하는 등등 미흡점들을 보완하는것이 기억에 더 잘 남고 좋을 것 같다. 화이팅!

0개의 댓글