//구글콘솔 광고 추가가

처음 코딩을 배우기 시작했을 때, 수박수박수박을 반복하는 문제가 아직도 잊혀지지 않는다.

코딩 쌤이 하루에 한 문제씩은 코딩테스트 문제를 풀어보라 하셨었고,

당시의 나는 코딩의 코자도 모르는 작디작은 코린이었다.

주변 친구들이 문제를 풀 때 나도 언젠가는 저렇게 잘 풀고 싶다는 마음을 갖고 지금까지 왔다.

 

일단 지금까지 푼 프로그래머스 문제들 329개. 점수는 1689점이다. 아직 한참 멀었다. 역시나 나에게 코딩 테스트는 너무나 어렵다. 도대체 사람들은 얼마나 좋은 머리를 가지고 세상을 살아가고 있는 걸까.

그래도 처음보단 점차 나아지고 있으니까 지금 이 순간보단 나은 내가 되어 가길 희망한다.

 

블로그를 시작하며 몇 가지 문제들을 정리해서 저장해 둘 생각이다. 0단계에서부터 2단계까지의 문제들을 풀었었고,

가장 높은 점수를 봤던 게 21점이랑 17점이었던 것 같다. 처음엔 10점 이상의 점수가 나오는 문제들도 신기했었다. 그러다 21점이랑 17점이 나와서 아주 놀랐던 기억이 있다. 지금 생각해 보면 그 정도 점수였으면 문제가 뭐였는지 기억이라도 해뒀어야 했던 게 아닌가 싶다. 아마 그땐 이 점수의 끝이 어디까지였는지 예측이 안됬던 상태가 아니었나 싶다. 내가 다시 높은점의 점수를 만날 수 있을까? 열심히 풀어보자.

728x90
반응형

티스토리에 코드 블럭 플러그 인이 있긴 하지만 원하는 테마가 없었다.

찾아봤더니 커스텀 테마 바꾸기는 스킨 변경에서 html코드를 추가해주면 되는데 이것도 되는 게 있고 안 되는 게 있더라.

base16이 앞에 붙어있는 애들은 거의 안됨. ㅜㅜ

아쉽게도 처음에 하고 싶었던 애는 base16-isotope이였는데 테마 적용이 안돼서 다시 찾아 선택한 애가 xt256 테마다. 

테마가 질리게 될 경우, 다시 변경시켜야 되니까 나를 위해 코드 블럭 커스텀 테마 바꾸기 방법을 정리해 둔다.


1. 우선 밑에 사이트에 가서 원하는 테마를 찾는다.

https://highlightjs.org/static/demo/

 

We're not a CDN - highlight.js

Do not use us as a CDN. You should not be linking to any assets that are hosted on our website. We are getting million of garbage requests due to this misuse of our assets.

highlightjs.org

 

2. 테마 이름을 아래 html 코드에서 테마 이름 적을 자리에 넣어 둔다.
<!-- 원하는 테마로 커스텀 -->
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/styles/테마이름적을자리.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.2.0/highlight.min.js"></script>
<!-- load() -->
<script>hljs.initHighlightingOnLoad();</script>

테마 이름에 띄어쓰기 가 있다면 - 이걸로 변경해서 적어준다.

base16으로 시작하는 애들은 다 실패했는데 혹시나 되는 분 계시면 댓글로 알려주세요!

 

3. 티스토리 블로그 관리로 가서 꾸미기 >> 스킨편집 >> html 편집 클릭

html 편집을 클릭해 준 다음 <head> 와 </head> 사이에 위에 있는 코드를 넣어준다.

나 같은 경우는 <head> 바로 밑에 넣거나 body로 가기 직전에 있는 </head> 바로 위에 넣는다.

</head> 바로 위에 적용

내가 선택한 xt256 테마 이름을 위에 코드에서 테마 이름 적을 자리에 잘 넣어주고 적용하기 버튼을 눌러서 저장해 준다.

 

4. 글쓰기에서 더보기 >> 코드 블럭을 선택해 준 다음, 코드를 적고 확인 버튼을 누른 후, 미리 보기를 통해 잘 적용 됐는지 확인하면 끝.

혹시나 미리 보기를 했는데 내가 봤던 코드의 테마가 적용되지 않을 경우, html에 적은 코드에 문제가 있거나 선택한 테마의 이름이 문제일 수 도 있으니 일단 다른 테마 이름을 선택해서 넣어 보자.

 

5. 다 잘 넣었는데 선택한 테마 바뀌지 않을 경우, 혹시나 코드문법 강조 플러그인을 해제시키지 않았는지 확인해 보자.

블로그 관리에서 플러그인 >> 코드문법 강조 플러그인은 해제시켜 줘야 내가 적용한 플러그인으로 변경되니 플러그인이 해제되어있는지 다시 한번 확인하자.

728x90
반응형

'이것저것' 카테고리의 다른 글

최근 읽은 책에 대해 기록하기.  (14) 2024.11.08
주기억장치의 종류에는 크게 RAM과 ROM 두가지가 있으며,
메모리라는 용어는 그중 RAM을 지칭하는 경우가 많음.
RAM의 특징

: 전원이 꺼지면 저장된 내용이 날아감.

- RAM은 휘발성 저장 장치, 보조기억장치는 비휘발성 저장 장치.

 

RAM의 종류
DRAM(Dynamic RAM) 저장된 데이터가 동적으로 사라지는 램. 데이터 소멸을 막기 위해 주기적으로 재활성화 해야 함. 
상대적으로 소비전력이 낮고 저렴하고, 집적도가 높아 대용량으로 설계하기 용이하기 때문에 실제로 메모리로 사용되는 램.
SRAM(Static RAM) 전원이 연결되어 있다면, 저장된 데이터가 정적인(사라지지 않는) RAM.
DRAM보다 일반적으로 입출력 속도가 빠름.
상대적으로 소비 전력이 높고 가격도 높고, 집적도가 낮아 대용량으로 설계할 필요는 없으나 빨라야 하는 장치에서 사용. 캐시메모리에서 사용되는 RAM.
SDRAM
(Synchronous DRAM)
DRAM의 발전된 램 >> 특별한(발전된 형태의) DRAM. 클럭 신호와 동기화된 DRAM.
DDR SDRAM
(Double Data Rate SDRAM)
특별한(발전된 형태의) SDRAM, 최근 가장 대중적으로 사용하는 RAM. 
대역폭을 넓혀 속도를 빠르게 만든 SDRAM. 대역폭은 데이터를 주고받을수 있는 길의 너비

 

  DRAM SRAM
재충전 필요함 필요없음
속도 느림 빠름
가격 저렴함 비쌈
집적도(오밀조밀 꽉꽉) 높음 낮음
소비 전력 적음 높음
사용 용도 주기억장치(RAM) 캐시메모리

 


메모리의 주소 공간

(물리 주소 & 논리 주소)

CPU와 실행중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 알고 있을까?
NO.
메모리에 저장된 값들은 시시각각 변하기 때문.
- 새롭게 실행되는 프로그램은 새롭게 메모리에 적재
- 실행이 끝난 프로그램은 메모리에서 삭제
- 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소는 달라짐.

이러한 점을 극복하기 위해 주소 체계를 물리주소와 논리 주소로 나눈다. 
물리 주소 논리 주소
메모리 입장에서 바라본 주소
말 그대로 정보가 실제로 저장된 하드웨어상의 주소
CPU와 실행 중인 프로그램 입장에서 바라본 주소.
실행중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소
물리 주소와 논리 주소의 변환
CPU와 메모리 사이에 있는 MMU(메모리 관리 장치)라는 하드웨어에 의해  논리주소는 물리 주소로 변환.
CPU가 이해하고 실행하는 주소는 전부 논리주소.
MMU는 논리주소와 베이스 레지스터(프로그램의 기 주소, 시작 주소)값을 더하여 논리 주소를 물리 주소로 변환함. 

*베이스 레지스터 : 프로그램의 가장 작은 물리 주소(프로그램의 첫 물리 주소)를 저장하는 셈.
*논리 주소 : 프로그램의 시작점으로 부터 떨어진 거리 인 셈.
CPU가 접근하려는 논리 주소는 한계 레지스터가 저장한 값보다 커서는 안됨.

 

메모리 보호 기법

1. 한계 레지스터 :

- 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막음.

- 베이스 레지스터가 실행중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장.

2. 주소범위 제한:

- 프로그램의 물리 주소 범위는 베이스 레지스터 값 이상에서부터 베이스 레지스터 값에 한계 레지스터 값을 더한 값 미만까지로 제한된다.

- 베이스 레지스터 값 <= 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터 값 

>> CPU는 메모리에 접근하기 전, 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사한다.
만약 검사를 했는데 논리 주소가 한계레지스터가 크면 인터럽트(트랩)를 발생시킨다.
이런 메모리 보호 기법을 통해 실행중인 프로그램의 독립적인 실행 공간을 확보하고, 하나의 프로그램이 다른 프로그램을 침범하지 못하게 보호한다.

 


 

 

CPU가 메모리에 접근하는 시간은 CPU 연산 속도보다 느리다.  

 

저장 장치 계층 구조(memory hierarchy)
: CPU에 얼마나 가까운가를 기준으로 계층적으로 나타낼수 있음

1. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.

2. 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다. 

메모리 저장 장치 계층 구조

캐시 메모리

- CPU와 메모리 사이에 위치한, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM기반의 저장장치

- CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생.

- CPU가 매번 메모리에 왔다 갔다 하는 건 시간이 오래 걸리니, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 쓰자.가 캐시메모리의 취지.

메모리에 접근  ==  물건을 사러가는 것이라 생각하면,
메모리 == 물건은 많지만 집(CPU)과는 멀리떨어져 있어 왕복이 오래 걸리는 대형 마트
캐시메모리 == 물건이 많지는 않아도 집(CPU)과 가까이 있는 편의점 이라 생각해보면 된다. 

 

캐시메모리는 하나가 아님. 계층적으로 구성할수 있음. CPU내부에 있을수도 외부에 있을 수도 있음.

계층적 캐시 메모리(L1 - L2 - L3 캐시) - 일반적으로 L1캐시와 L2캐시는 코어 내부에, L3캐시는 코어 외부에 있다.

L3캐시의 용량은 메모리보다 작지만, L1과 L2캐시보단 크다. 

계층적 캐시 메모리까지 반영한 저장 장치 계층 구조

참조 지역성의 원리
: CPU가 미래에 원하는 데이터를 예측하여 속도가 빠른 장치인 캐시 메모리에 담아 놓는데 이때의 예측률을 높이기 위하여 사용하는 원리 >> CPU가 사용할 법한 데이터를 예측하는 방법.

- 캐시 메모리는 메모리보다 용량이 작다. 당연하게도 메모리의 모든 내용을 저장할 수 없다.

따라서, CPU가 자주 사용할 법한 내용을 예측하여 저장함.

캐시 히트 예측이 들어맞을 경우(자주 사용할 것으로 예측한 데이터가 실제로 들어맞아 CPU가 캐시메모리에 저장된 값을 활용할 경우)
>> 이 경우엔 메모리에 접근하는 것보다 성능이 높아짐
캐시 미스 예측이 틀렸을 경우(자주 사용할 것으로 예측하여 메모리에 저장했지만 예측이 틀려 CPU가 메모리에 접근해야 하는 경우) 
>> 성능 하락!
캐시 적중률 캐시 히트 횟수 / (캐시히트횟수 + 캐시미스 횟수)
>> 적중률이 높으면 높을 수록 성능 높아짐.
참조 지역성의 원리란, CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리.

CPU의 주된 경향 2가지
- CPU는 최근에 접근 했던 메모리 공간에 다시 접근하려는 경향(시간 지역성)이 있다.
- CPU는 접근한 메모리 공간 근처를 접근하려는 경향(공간 지역성)이 있다. 
728x90
반응형

명령어 집합구조( Instruction set architecture, ISA )

: CPU가 이해할 수 있는 기계어 명령어들의 집합

명령어 집합(구조)
: CPU의 언어인 셈이며, 명령어가 달라지면 명령어의 해석방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등등
많은 것들이 달라진다.

- 소프트웨어와 하드웨어 사이의 약속이다 라고 볼 수도 있다.

- 하드웨어와 시스템 소프트웨어 사이의 인터페이스를 정의하며, 최하위 레벨의 프로그래밍 인터페이스로서 CPU가 실행할 수 있는 모든 명령어를 포함한다.

 

명령어 집합의 두 축 : CISC & RISC
CISC( Complex Instruction Set Computer )
: 복잡한 명령어 집합을 활용하는 CPU

- 복잡하고 다양한 명령어를 활용, 명령어의 형태와 크기가 다양한 가변길이 명령어를 활용.

- 다양하고 강력한 명령어를 활용, 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있음.

메모리를 최대한 아끼며 개발해야 했던 시절엔 인기가 좋았음.
BUT, 가변길이 명령어를 사용하므로 명령어 파이프라이닝이 불리하다는 치명적인 단점이 존재.
: 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기 까지의 시간이 일정하지 않음.
복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기 필요.
대다수의 복잡한 명령어는 사용 빈도가 낮음. 

일반적으로 하드웨어 스택(Stack)이 내장되어 있으며, 서브루틴의 return 주소나 파라미터, 지역변수 등을 저장하는 데 사용된다. 따라서 call, push, pop 같은 명령어를 통해 스택 데이터를 관리할 수 있다.

 

RISC( Reduced Instruction Set Computer )
: 명령어 집합의 수를 줄여 하드웨어 구조를 간단하게 만든 CPU

- 명령어의 종류가 적고, 짧고 규격화된 명령어 사용.

- 단순하고 적은 수의 고정 길이 명령어 집합을 활용.

 짧고 규격화된 명령어를 사용하여 명령어 파이프라이닝에 유리.
: 메모리 접근을 최소화하고 많은 범용 레지스터를 사용하므로 속도가 빠르며, 전력소모가 적고 가격이 저렴.
다만 명령어 종류가 CISC보다 적어서 더 많은 명령어로 프로그램을 동작시킴.

CISC와 달리 스택 관련 명령어가 존재하지 않기 때문에 서브루틴의 return 주소나 파라미터, 지역변수 등은 소프트웨어적으로 처리해야 한다.

 

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

 

728x90
반응형

비교 구문

원급 / 비교급 /최상급

비교급/ 최상급 만드는 규칙 비교급 최상급
1 -e로 끝나면 '-r','-st' larger the largest
2 '단모음 + 단자음' 으로 끝나면 자음 하나 더 쓰고 '-er', '-est' bigger the biggest
3 '자음 + y'는 'y'를 'i'로 고치고 '-er', '-est' happier the happiest
4 'able, al, ant, ful, ive, ous, less'로 끝나는 2음절은
'more ~', 'most ~'
more careful the most careful
5 3음절 이상 긴 단어면 'more ~', 'most ~'
(허밍해봐 몇음절되는지 쉽게 알수 있어 음음음! 음음!)
more expensive the most expensive
6 '-ly'로 끝나는 "부사"는 'more ~', 'most ~' more effectively /
more quickly
most effectively /
most quickly
비교급/ 최상급 불규칙 비교급 최상급
1 good better best
2 bad worse worst
3 many / much more most
4 little less least

 

원급

1. as + 형용사 /부사 + as 푸는 방법 - as랑 as사이에 형용사나 부사가 들어간다가 제일 중요!!

>> 앞에 as를 없다 생각하고 문장 구조 분석

2. as many 복수 명사 as / as much 불가산명사 as

3. 원급을 강조해 주는 부사 - just, almost, nearly + 형용사/부사   << 사실 많이 나오진 않아. 그냥 알아두는 정도로 알아둬.

 

비교급
아주 아주 잘 나와! 비교급 > 최상급 > 원급 순으로 시험에 잘 나옴.
1. more + 형용사/ 부사 + than 푸는 방법
>> more 같은 거 없다고 생각하고 신경 쓰지 말고 자리를 파악하는 게 제일 중요하데.
2. 비교구문에 the를 쓰는 경우
- the 비교급~, the 비교급~. >> ~할수록 점점 더 ~하다.
ex> The more challenges you face, the stronger you'll become.
       The sooner the better.
- the 비교급 + of the two. 
ex> John is the more experienced of the two managers.
       Soo is the more knowledgeable of the two experts.
3. 비교급 강조 부사     
- a lot, even, much, still far                          쉽게 외우는 방법 :  어랏이뭐 ㅅㅍ?!
ex>
- Our profits this year are even higher than they were last year.
- The updated security measures now protect our data much more effectively than the old system did. 
a lot better, even better : 훨씬 좋은 

 

최상급
1. the/소유격 + 형용사의 최상급 + 명사를 쓰는 게 특징.
2. one of the/소유격 + 형용사의 최상급 + 복수명사
3. 최상급 강조 부사
- by far, so far, yet, quite
ex> 
- Among the various candidates, she is by far the most qualified for the managerial position.
- The latest technology conference was quite the biggest event of the year.

드디어 끝났다. 서아쌤의 수업방식은 정말 집중이 잘 되는 것 같다.

쉽게 외울 수 있는 방법도 머리에 쏙쏙 박힌다.

어려워도 반복해서 보다 보면 영어 포기자들도 문법에 쉽게 접근할 수 있을 것 같다.

유튜브 강의를 보면서 나를 위해 정리를 했지만, 정리한 자료를 토대로 이 블로그를 통해 또 누군가가 쌤의 강의에 대해 접근해 볼수 있길 바란다.

 

당분간은 또 다시 코딩의 세계로.

안녕.

728x90
반응형
어떻게 시간을 알뜰살뜰하게 쓰면서 명령어들을 빠르게 처리할 수 있을까?
명령어 파이프라인
: 순차적으로 명령어를 처리함.
명령어 인출 >> 명령어 해석 >> 명령어 실행 >> 결과 저장 
-같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행할수 있다. >> 동시에 여러 개의 명령어를 겹쳐서 실행

ex>>
명령어 1  인출 >> 해석 >> 실행 >> 저장
명령어 2                인출 >> 해석 >> 실행 >> 저장
명령어 3                              인출 >> 해석 >> 실행 >> 저장

명령어 파이프라인이 성능향상에 실패하는 경우, 제대로 병렬처리가 되지 않는 경우 >> 파이프라인 위험이라 함.
파이프라인 위험에는 데이터 위험, 제어 위험, 구조적 위험이 있다.

데이터 위험 명령어 간의 의존성으로 인해 아직 수행되지 않은 명령어의 결과값을 참조함으로써 발생하는 위험.
모든 명령어를 동시에 처리할 수는 없다.
(이전 명령어를 끝까지 실행해야만 비로소 실행 할 수 있는 경우)
제어 위험 프로그램 카운터의 갑작스로운 변화로 발생하는 위험.
구조적 위험  서로 다른 명령어가 같은 자원(ALU, 레지스터 등)에 접근함으로써 발생하는 위험
- 슈퍼 스칼라: CPU내부에 여러개의 명령어 파이프라인을 포함한 구조 (오늘날의 멀티스레드 프로세서)
: 이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가해야 하는데, 현실적으로는 관리해야 하는 파이프라인도 증가를 하고, 파이프라이 위험도의 증가도 있어서 파이프라인 개수에 비례하여 처리 속도가 증가하진 않음.

 

비순차적 명령어 처리( Out-of-Order Execution, OoOE)

:파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법. 

BUT, 아무 명령어가 순서를 바꿀 수는 없다. 전체 프로그램 실행 흐름에 영향이 없어야 함. 

728x90
반응형

코어와 멀티 코어

코어(core)란?
: CPU내에서 명령어를 실행하는 부품
현대적인 관점에서 "CPU"라는 용어를 재해석해야 함.
전통적으로 명령어를 실행하는 부품은 원칙적으로 하나만 존재.
그러나, 오늘날 CPU에는 여러개가 존재.
CPU안에서 명령어를 인출하고 해석하고 실행하는 부품 == 오늘날의 "코어"

싱글 코어 == 하나만 있는 코어.
멀티코어 == 두개 이상의 코어.
멀티코어 프로세서 == 여러 개의 코어를 포함하고 있는 CPU.

코어수에 비례해서 CPU의 속도가 증가하는 건 아님.


스레드와 멀티 스레드

스레드(thread)란?
: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
스레드는 하드웨어적 스레드와 소프트웨어적 스레드가 있다.
- 하드웨어 스레드( 논리 프로세서라고도 함): 하나의 코어가 동시에 처리하는 명령어 단위. 
- 소프트웨어 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위.
1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.

 

멀티스레드(multi thread)란?

: CPU의 최대 활용을 위해 프로그램의 둘 이상을 동시에 실행하는 기술.


강의를 듣다가 하드웨어 스레드와 프트웨어 스레드에 대해 궁금해져서 더 찾아보았는데,

더 쉽게 이해 할수 있는 글을 읽었다.

 

'4코어 8(하드웨어) 스레드라는 것은, 상하권이 나뉜 4세트의 책과 같습니다. 이 4세트를 가지고 도서관에서 100명의 사람에게 빌려 줄 수 있습니다. 비록 한 번에 읽을 수 있는 사람은 8 사람 (소프트웨어 스레드) 밖에 없지만요.'

 

스레드들을 공부하다가 잘 정리된 블로그가 있어서 추가해둔다.

싱글스레드와 멀티스레드 참고 블로그

https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj

728x90
반응형

레지스터란?

CPU 내부의 작은 임시 저장 장치이며,

프로그램 속 명령어 & 데이터는 실행 전 후로 관련된 값들이 레지스터에 저장된다.

 

반드시 알아야 할 레지스터의 종류
1 프로그램 카운터 메모리에서 가져올 명령어의 주소를 저장 (메모리에서 읽어 들일 명령어의 주소)
>> Instruction Pointer(명령어 포인터) 라고도 부르는 cpu도 있음
2 명령어 레지스터 해석할 명령어를 저장 (방금 메모리에서 읽어 들인 명령어) >> 제어장치가 해석
3 메모리 주소 레지스터 메모리의 주소 저장 >> CPU가 읽어 들이고자 하는 주소를 주소버스로 보낼때 거치는 레지스터
4 메모리 버퍼 레지스터 메모리와 주고 받을 값을 저장(데이터와 명령어) >> CPU가 정보를 데이터 버스로 주고 받을떄 거치는 레지스터
5 플래그 레지스터 연산 결과 또는 CPU 상태에 부가적인 정보를 저장
6 범용 레지스터 다양하고 일반적인 상황에서 자유롭게 사용(주소, 명령어, 데이터 등 다양하게 저장 가능)
7 스택 포인터 주소 지정에 사용 스택 주소 지정 방식: 스택과 스택 포인터를 이용한 주소 지정 방식
스택 포인터: 스택의 꼭대기를 가리키는 레지스터. (스택이 어디까지 차 있는지에 대한 표시 같은거.)
8 베이스 레지스터 주소 지정에 사용 번위 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 특정 레지스터(프로그램 카운터, 베이스 레지스터)의 값을 더하여 유효 주소 얻기. 
상대 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더하여 우효 주소 얻기.
베이스 레지스터 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 베이스 레지스터(기준 주소)의 값을 더하여 유효 주소 얻기.

명령어 사이클과 인터럽트 ★ ★ ★

명령어 사이클

- 명령어 사이클이란, 프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 말함.

인출 사이클 : 가장 먼저 CPU를 갖고 온다.
실행 사이클:  가지고 온 걸 실행한다.
인출 >> 실행 >> 인출 >> 실행... (반복). 
but, CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있음.
이러한 메모리 접근이 더 필요한 경우엔 간접 사이클이 추가됨.
인출>> 간접 >> 실행 >> 인출 >>...(반복)

인터럽트가 발생했을 경우, 인터럽트 사이클 추가 됨.
인출 >> 간접 >> 실행 >> 인터럽트 >> 인출...(반복)
인터럽트
: 정해진 흐름대로 명령어를 처리하려는 CPU의 흐름을 끊어 버리는 행동을 함.

- 인터럽트(interrupt): 방해하다, 중단시키다.

- CPU가 꼭 주목해야 할 때이거나, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생.
ex>> 헤이헤이, 급해 급해!! 지금 하던 거 일단 멈추고 이것부터 실행해 줘!!
-인터럽트의 종류 :
1. 동기 인터럽트(예외) : CPU가 예기치 못한 상황을 접했을 때 발생.
 -동기 인터럽트의 종류 : 폴트, 트랩, 중단, 소프트웨어 인터럽트.
2. 비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치에 의해 발생. 알림과 같은 역할(쿠쿠밥다됨 알림 같은 거)
하드웨어 인터럽트에 대해 더 자세하게 알아보자.
:  알림과 같은 인터럽트.

- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용.

- 입출력장치는 CPU에 비해 느리다.
  인터럽트가 없다면 CPU는 명령 완료 여부를 확인하기 위해 주기적으로 확인해야 됨.
>> 그렇기 때문에 인터럽트를 이용해 입출력 작업동안 CPU가 다른 일을 할 수 있게 함.
하드웨어 인터럽트의 처리 순서
:인터럽트의 종류와 상관없이 인터럽트 처리 순서는 비슷함.
  1. 입출력 장치는 CPU에 인터럽트 요청 신호를 보냄.(입출력 장치들이 "지금 껴들어가도 되나요?" 하는 요청신호)
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전에 항상 인터럽트 여부를 확인함.
  3. CPU는 인터럽트 요청을 확인하고 플래그 레지스터에 있는 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인. >> 하드웨어 인터럽트에는 모든 인터럽트를 인터럽트 플래그로 막을 수 있진 않아. 막을수 있는 인터럽트와 막을수 없는 인터럽트로 나뉨
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업(스택영역에 백업)함.
  5. CPU는 인터럽트 벡터*를 참조하여 인터럽트 서비스 루틴*을 실행함.
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개.

* 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보.

* 인터럽트 서비스 루틴 :

인터럽트가 발생했 을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램. 프로그램이기에 메모리에 저장.

ex> 키보드가 인터럽트 요청을 보내면 이렇게 행동해야 함.

CPU가 인터럽트를 처리한 다라는 의미 >> 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다.(+ 그리고 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다.)

728x90
반응형

+ Recent posts