본문 바로가기

카테고리 없음

혼자 공부하는 컴퓨터구조 + 운영체제 4~5Chapter 요약정리

 
혼자 공부하는 컴퓨터 구조+운영체제
이 책은 독학으로 컴퓨터 구조와 운영체제를 배우는 입문자가 ‘꼭 필요한 내용을 제대로 학습’할 수 있도록 구성했다. 뭘 모르는지조차 모르는 입문자의 막연한 마음에 십분 공감하여 과외 선생님이 알려주듯 친절하게, 핵심 내용만 콕콕 집어 준다. 〈컴푸터 구조〉편에서는 컴퓨터를 이루고 있는 부품들과 각 부품의 역할을 알아본다. 또한 컴퓨터 내부의 구조와 작동법을 이해하고, 컴퓨터가 어떻게 명령어를 처리하는지 학습한다. 〈운영체제〉편에서는 운영체제의 필요성을 배운 뒤 앞서 배운 컴퓨터의 부품들을 운영체제가 어떻게 사용하는지 전체 과정을 살펴본다. ‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접을 제대로 준비해야 할 때’ 다른 입문서에서는 알려주지 않았던 진짜 컴퓨터 공학 지식을 〈혼자 공부하는 컴퓨터 구조+운영체제〉에서 만나 보자! 42명의 베타리더와 함께 입문자에게 꼭 맞는 난이도, 분량, 학습 요소 등을 적극 반영했다. 어려운 용어와 개념은 한 번 더 풀어 쓰고, 적절한 예시와 이해하기 쉬운 그림으로 누구나 이해할 수 있도록 구성했다. 또한 일상 소재를 활용한 비유를 활용하여 어렵게 느껴질 수 있는 컴퓨터 구조와 운영체제를 머릿속에 직접 그리듯이 설명해 준다. ‘혼자 공부해 본’ 여러 입문자의 초심과 눈높이가 책 곳곳에 반영된 것이 이 책의 가장 큰 장점이다.
저자
강민철
출판
한빛미디어
출판일
2022.08.16

 

혼자 공부하는 컴퓨터주고 + 운영체제 책 표지

 

안녕하세요 !
혼공단 11기로 선정 되어

공부하게 된 박지영입니다 🙂

매주 1회 혼자 공부하는 컴퓨터구조 + 운영체제 요약을 올리고 있습니다.

파이썬, 빡공단 C언어 등 많은 프로그래밍 요약을 올리고 있을거니
다른 글도 많은 관심 부탁드립니다 🥰

 

Chapter 04 CPU의 작동 원리

04-1 ALU와 제어장치

 

ALU. 저번요약에 등장했던 용어이죠 ?

ALUCPU에서 계산을 담당합니다.

 

ALU는 레지스터를 통해 피연산자를 받아들이고

제어장치로부터 제어신호를 받아들입니다.

그리고 ALU가 연산을 하여 결과값을 레지스터에 보내고, 플래그를 플래그 레지스터에 보냅니다.

 

(연산 결과가 연산결과를 담을 레지스터보다 큰 상황 : 오버플로우)

 

 

연산결과에 대한 추가적인 상태정보 : 플래그

 

대표적인 플래그

- 부호 플래그 : 연산한 결과를 부호로 나타냄( 1: 음수, 0 : 양수 )

- 제로 플래그 : 연산결과가 0인지 여부 나타냄 ( 1: 연산결과 0, 0 : 연산결과 0 아님 )

- 캐리 플래그 : 연산결과 올림수나 빌림수가 발생 여부 나타냄 ( 1: 발생함, 0 : 발생하지 않음 )

- 오버플로우 플래그 : 오버플로우가 발생 여부 나타냄 ( 1: 발생함, 0 : 발생하지 않음 )

- 인터럽트 플래그 : 인터럽트가 가능한지 여부 나타냄 ( 1: 가능함, 0 : 가능하지 않음 )

- 슈퍼바이저 플래그 : 커널모드가 실행중인지, 사용자모드가 실행중인지 ( 1: 커널모드, 0 : 사용자모드 )

 

(1은 긍정, 0은 부정인 경우가 많다)

 

그리고 플래그들은 플래그 레지스터라는 레지스터에 저장됨.

 

제어장치 : 제어신호(컴퓨터 부품들을 관리하고 작동시키기 위한 전기신호)를 내보내고, 명령어를 해석하는 부품

108p 제어장치 그림표현

 

클럭 : 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간단위 (똑-딱-똑-딱-)

 

제어장치는 해석해야 할 명령어(명령어 레지스터)를 받아들입니다.제어장치는 플래그 레지스터 속 플래그 값을 받아들입니다.제어장치는 시스템 버스, 그 중 제어버스로 전달도니 제어신호를 받아들입니다.(제어장치는 CPU 내/외부로 제어신호를 보낸다)

 

 

04-2 레지스터

 

레지스터 종류

- 프로그램 카운터

- 명렁어 레지스터

- 메모리 주소 레지스터

- 메모리 버퍼 레지스터

- 범용 레지스터

- 플래그 레지스터

- 스택 포인터

- 베이스 레지스터

 

프로그램 카운터(명령어 포인터) : 메모리에서 가져올 명령어의 주소. 메모리에서 읽어 들일 명령어의 주소를 저장

명렁어 레지스터 : 해석할 명령어. 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터

메모리 주소 레지스터 : 메모리의 주소를 저장하는 레지스터

메모리 버퍼 레지스터(메모리 데이터 레지스터) : 메모리와 주고받을 값(데이터/명령어)을 저장하는 레지스터

범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터. 데이터와 주소를 모두 저장할 수 있다.

플래그 레지스터 : 연산결과 또는 CPU상태에 대한 부가적인 정보를 저장하는 레지스터

 

특정 레지스터를 이용한 주소 지정방식

1. 스택 주소 지정 방식

- 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식. 가장 최근에 저장하는 값부터 꺼낼 수 있다.

(이걸 보니 100p의 스택과 큐가 생각나네요)

 

- 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터. 마지막으로 저장한 값의 위치를 저장하는 레지스터

- 스택영역 : 스택 메모리 안에 스택데이터를 넣을 영역

 

2. 변위 주소 지정 방식

변위 주소 지정 방식 : 오퍼랜드 필드 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식

 

변위 주소 지정 방식을 사용하는 명령어는

연산코드 필드, 어떤 레지스터의 값을 더할지 나타내는 레지스터 필드, 주소를 담고 있는 오퍼랜드 필드가 있다.

 

- 상대 주소 지정 방식 : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효주소를 얻는 방식 ex. 프로그램 카운터가 -3이라면 -3번지에.

- 베이스 레지스터 주소 방식 : 오퍼랜드와 베이스 레지스터의 값을더하여 유효 주소를 얻는 방식

ex.  연산코드의 베이스 레지스터 50, 베이스 레지스터 200이라면 기준 주소 200번지로 부터 50번지 떨어진 코드 실행.

(121~122P 그림 참조하는 것이 이해하기 쉬워요 ! -> 그림이 필요하실 것 같다면 댓글로 알려주세요 !)

 

04-3 명령어 사이클과 인터럽트

 

명령어 사이클 : 명령어를 처리하는 정형화된 흐름

-> 이 흐름이 끊어지는 상황 : 인터럽트

 

프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행 -> 이 주기를 명령어 사이클

메모리에 있는 명령어를 CPU로 가지고 오는 단게 : 인출 사이클

CPU로 가져온 명령어를 실행하는 단계 : 실행 사이클

 

인출 사이클(가지고 오는)과 실행 사이클(실행하는)을 계속 반복한다.

 

간혹 메모리에 한 번 더 접근이 필요한 경우가 있습니다. 이것을 간접 사이클이라고 합니다.

 

인출 사이클 <--(메모리에 접근이 더 필요한 경우 : 간접사이클)--> 실행 사이클

 

인터럽트

 

프로그램을 개발하다보면 KeyboardInterrupt(키보드 인터럽트) 같은 인터럽트를 보실 수 있습니다.

 

인터럽트는 영어로 interrup이며 "방해하다, 중단시키다"라는 것을 의미합니다.

이렇게 CPU의 작업을 방해하는 신호를 인터럽트라고 합니다.

 

인터럽트의 종류

1. 동기 인터럽트(예외) : 예상치 못한 상황을 마주쳤을때. CPU가 실행하는 프로그래밍 상의 오류같은 예외적인 오류가 발생했을 때

 

- 폴트 : 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외.

- 트랩 : 예외를 처리한 직수 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외.

(디버깅 : 프로그램 개발 중에 발생한 문제를 진단하고 해결하기 위한 작업)

- 중단 : CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때

- 소프트웨어 인터럽트 : 시스템 호출이 발생했을 때

 

2. 비동기 인터럽트(하드웨어 인터럽트) : 입출력 장치에 의해 발생.

 

- 막을 수 있는 인터럽트

- 막을 수 없는 인터럽트

 

하트웨어 인터럽트 처리 순서 :

(인터럽트 요청 신호 -> 인터럽트 플래그 -> 인터럽트 벡터 -> 인터럽스 서비스 루틴(인터럽트 핸들러). 을 반복

(백업을 복구 실행하여 벡터부터 시작하며 반복))

 

인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 프로그램

인터럽트 벡터 : 서비스 루틴을 식별하기 위한 정보

 

 

Chapter 05 CPU 성능 향상 기법

05-1 빠른 CPU를 위한 설계 기법

 

클럭 (클럭 속도는 헤르츠 단위(Hz)) -> 클럭 속도가 높은 CPU는 빠르게 작동한다.

 

클럭속도는 일정하지 않습니다.

다만, 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고, 그렇지 않을 때는 유연하게 클럭 속도를 낮춘다.

 

최대 클럭 속도를 강제로 더 끌어올릴 수도 있다 (이런 기법을 오버클럭킹)

 

코어 : 명령어를 실행하는 부품

멀티코어CPU(멀티코어 프로세서) : 코어를 여러 개 포함하고 있는 CPU

 

스레드 : 실행흐름단위

- 하드웨어적 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위

(멀티스레트 프로세서 or 멜티스레드 CPU라고도 한다.)

(하이퍼스레딩이라는 용어 자주 나오기 기억해두기)

 

- 소프트웨어적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위

(python, java c++ 등의 프로그래밍 언어를 이용해 소프트웨어적 스레드 만들 수 있다)

 

멀티스레드 프로세서는 실제로 설계하는 일은 복잡하지만 핵심은 레지스터입니다.

하나의 코어로 여러 개 명령어를 동시에 실행 할 수 있는 CPU

 

하드웨어 스레드를 논리 프로세서라고도 부른다.

 

 

05-2 명령어 병렬 처리 기법

 

명령어를 동시에 처리하여 CPU를 한시도 쉬지않고 작동시키는 기법 : 명령어 병령 처리 기법.

대표적으로 명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리가 있습니다.

 

마치 공장 생산 라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법을 명령어 파이프라이닝이라고 부른다.

(명령어 파이프라이닝 : 동시에 여러 개의 명령어를 겹쳐 실행하는 기법)

 

파이프라이닝이 높은 성능을 가져오기는 하지만 성능 향상 실패하는 경우도 있다. 이러한 상황을 파이프라인 위험이라고 한다.

파이프라인 위험의 종류는 데이터 위험, 제어 위험, 구조적 위험이다.

 

데이터 위험 : 명령어 간 데이터 의존성에 의해 발생

제어 위험 : 분기 등으로 인한 프로그램 카운터의 갑작스로운 변화에 의해 발생

-> 제어위험을 위해 사용하는 기술. 분기예측 : 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술

구조적 위험(자원위험) : 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU,

레지스터 등과 같은 CPU 부품을 사용하려고 할때 발생

슈퍼스칼라 : CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조

비순차적 명령어 처리 : 이름에도 알 수 있듯 명령어들을 순차적으로 실행하지 않는 기법. '합법적 새치기' 느낌

무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지한다.

 

05-2 명령어 병렬 처리 기법

 

어느덧 CPU의 마지막 이야기입니다.

 

CPU의 언어인 ISA와 각기 다른 성격의 ISA를 기반으로 설계된 CLSC와 RLSC를 학습해보겠습니다.

 

CPU가 이해할 수 있는 명령어들의 모음을 명령어 집학 or 멸령어 집합 구조(ISA)라고 합니다.

CPU마다 ISA가 다를 수 있다는 것.

 

CLSC와 RICC 이론 비교

CISC RISC
복잡하고 다양한 명령어 단순하고 적은 명령어
가변 길이 명령어 고정 길이 명령어
다양한 주소 지정 방식 적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음 프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행 1클럭 내외로 명령어 수행
파이프라이닝하기 어려움 파이프라이닝하기 쉬움

 

 

이렇게 혼공단 컴퓨터구조 + 운영체제 1주차 4~5파트 요약 정리를 마쳤습니다.

 

이제 미션을 해볼까요??

2주차
(1/8 ~ 1/14)
Chapter 04 ~ 05 p. 125의 확인 문제 2번, p. 155의 확인 문제 4번 풀고 인증하기 Ch.05(05-1) 코어와 스레드, 멀티 코어와 멀티 스레드의 개념을 정리하기

 

기본 미션 인증

 

p. 125의 확인 문제 2번
p. 155의 확인 문제 4번

 

 

선택미션의 개념은
위에 요약정리에 있어요 !

 

이렇게 2주차도 잘 마쳤는데

10기때보단 열심히 할 수 있어서 뿌듯하네요.그때는 파이썬과 자바를 동시에 해서 너무 힘들었어요ㅠㅠ다들 공부를 하려면 역시 한가지를 최대한 열심히 파는게 좋은 것 같아요 !!

 

1주차엔 우수혼공단은 아니지만

참고하세요 !! 로 되어서 내심 기뻤습니다 !!

제 요약글이 참고해도 될 정도라니 너무 좋았어요 !!