패스트캠퍼스

[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 12회차 미션

돌맹이시터 2020. 10. 30. 19:26

 

환급미션 12일째

 

 

 

전공과목이긴 하지만,

이런 수업을 처음 접하는 수강생이 많기 때문에

심도깊게 다루는 강의는 아니고, 가능하면 가볍게 교양수업 정도의 내용을 다룬다고 한다.

 

 

 

 

컴퓨터 구조 - 중앙처리장치 - cpu 내부구조와 명령어 집합 -1 

컴퓨터 구조 - 중앙처리장치 - cpu 내부구조와 명령어 집합 -1 

 

 

 

 

명령어 ( instruction ) 구성과 실행, 그리고 cpu ( central processing  unit )을 디자인 또는 설계하기 위해 필요한 것들에 대해 다루었다.

 

 

 

 

- 명령어 ( instruction ) 구성과 실행

 

 

* 명령어 코드

 

레지스터 전송문으로 나타내어지는 기본 컴퓨터의 각 연산이 어떻게 동작하는지를 확인한다.

cpu의 구조는 내부 레지스터, 타이밍과 제어구조 명령어 집합에 의해 정의된다.

 

 

* 레지스터 전송 언어

 

레지스터에 저장된 데이터의 조작을 위해 실행되는 동작을 마이크로 연산 (micro-operation) 이라고 한다.

하나의 clock-pulse 내에서 실행되는 기본적인 동작을 뜻하는데

이전 시간에서 다루었던 내용이지만 이런 마이크로 연산의 예시로

left/right shift, count, clear, load 등의 연산 등이 있다.

 

레지스터의 종류나 기능에 대해서는 자세히 다루지 않았고, 

지난번 강의정리에 나와있는 레지스터들을 다시 훑어보고 자세히 공부할 필요는 아직은 없을 듯 하다.

 

또한 cpu의 구조를 정의하기 위해 알아두어야 할 내용이 그 외에도 마이크로 연산을 on/off시킬수 있는 제어 기능이 있는데

마찬가지로 자세하게 알 필요는 없고

지난 시간에 다루었던 내용 정도만 숙지해 두면 될 것이다.

 

 

 

 

강의자료에 오타가 있어서 수정했다.

d. 상위 비트와 하위 비트 표현 부분에서 비트 위치를 나타내는 숫자 위치가 잘못되었는데,

가장 왼쪽이 15, 가장 오른쪽이 0 인 값이 기본이며

상위 비트 / 하위비트 각각 8개의 비트로 이루어지게 된다.

 

 

일반적인 표현들을 알아보았는데,

앞으로 도면이나 flow chart 작성할 때 혹은 학습할 때 유용할 것이라고 한다.

 

Register를 뜻하는 문자 R과 숫자가 함께 사용되고,

(b)는 8개의 bit를 탑재할 수 있는 레지스터를 나타낸다.

내부에 있는 숫자는 비트의 위치를 나타낸다.

 

(c), (d)는 박스 외부에 숫자가 표기되어 있는데,

탑재되는 bit 수가 많아지면 표기가 복잡해지기 때문에 위의 그림에서와 같은 방식으로 표현한다고 한다.

(d)에서 확인되는 PC(H), PC(L)은 각각 상위 비트, 하위 비트를 나타낸다.

 

 

 

R_2 <- R_1


그림에 적혀있는 것과 같이 치환 연산자 (replacement) 를 이용한 레지스터 간의 정보 전송을 나타내는데

R_1의 정보값을 R_2로 옮겨라. 라는 뜻이라고 한다.

 

 

P : R_2 <- R_1

 

P는 조건 연산자를 나타낸다.

P=1 이라면 (조건) R_1의 정보값을 R_2로 옮기게 되고

조건을 충족하지 못한다면 해당 명령어를 무시하고 다음으로 넘어가게 된다.

 

이처럼 조건부 처리가 가능하려면

소스 레지스터 (source) 로부터 목적 레지스터 (target)의 연결과, 병렬로드 기능이 필요하다.

 

 

 

 

 

 

위 그림은 레지스터 전송에 있어서 기본적인 기호를 나타낸다.

 

 

괄호 기호의 사용 예시 중 몇 가지를 해석해보자면

 

R2(0-7) : 2번째 레지스터의 0번부터 7번까지의 bit

R2(L) : 레지스터의 low bound (하위 비트 영역을 뜻하는 듯)

R_2 <- R_1, R_1 <- R_2 : 두 연산이 서로에게 영향을 주지 않는 parallel 연산을 의미. 각 연산을 동시에 진행하게 된다.

 

 

 

 

 

- CPU 디자인 

 

지난시간부터 cpu를 구성하는 요소들에 대해 다루어왔다.

cpu 내의 다양한 디바이스들 간의 상호 연결이 필요한데

연결 방식에도 두 가지가 있다.

 

* 직접 연결

연결 복잡도가 장치 수의 제곱에 비례한다.

 

* 버스 연결

공용선 ( common bus line )에 의한 연결으로, 

공통 라인을 하나 두고, 레코드들을 라인에 접목시키는 방식이다.

직접 연결에 비해 가성비가 훨씬 높다.

 

 

 

위 도표에서 

 

위에 있는 부분이 직접 연결하는 경우를 나타낸다. 연결 복잡도가 장치수의 제곱과 정확하게 비례하는 것은 아니지만 버스 연결 방식에 비해서는 장치 수가 많아질수록 너무 복잡하고, 많은 연결이 필요한 것을 직관적으로 알 수 있다.

 

아래에 있는 부분이 버스 연결 방식을 나타낸다. 한 눈에 보아도 직접 연결하는 방식보다 더 단순한 것을 확인할 수 있다.

 

 

 

 

공용 버스의 예시로 멀티 플렉서를 이용한 방식이 있다.

강의 2.11 조합논리회로 - 멀티 플렉서에서 다루었던 내용이고,

자세하게 이해할 필요는 없지만 이런 게 있다 정도로 다루고 넘어간다.

 

 

 

 

 

버스 연결의 또다른 예시로

3 상태 버스 버퍼를 보여준다.

 

마찬가지로 위 레지스터에 대해 아직 자세히 알 필요는 없지만 강의에서 말씀해 주셨던 부분이 있다.

위의 예시에서

버퍼 자체가 일시적으로 연산의 중간 결과값을 기억하는 역할인데,

E (Enable) 값이 0일 때, 저항값이 높아서 신호가 전달이 되지 않고, 이전 상태를 유지(기억)하게 된다고 한다.

 

하나의 예시를 기억하는 게 중요한 것이 아니라,

이런 게 있다 정도 받아들이고 넘어가면 될 듯 하다.

 

 

 

 

 

 

 

마지막으로

스택 (stack), 큐 (queue), 데크(deque) 의 특징과 활용 예시를 다루었다.

자세히 다룬 건 아니고 표만 보고 넘어갔는데..

자료구조 파트에서 다룬다고 한다. 1파트 진도 빼다보면 나오겠지...

 

 

 

 

 

소프트웨어 베이직 - c언어의 기초 - 11. 문자열

 

 

 

- 문자열의 개념

 

 

문자열 : 문자들의 배열

문자열은 컴퓨터 메모리 구조상에서 마지막에 널 ( NULL ) 값을 갖는다.

null 값은 \0 으로 표현되기도 한다.

위 그림의 문자열은 11자 + null 으로 메모리 공간을 차지한다.

null 값은 문자열의 끝을 알리기 위해 사용되고,

printf() 함수를 사용하면 컴퓨터는 null을 만날 때까지 한 글자씩 출력한다.

 

 

 

문자열 형태로 포인터를 사용하면 포인터가 특정한 문자열의 주소를 갖게 된다.

위의 코드는 "Hello world" 문자열을 읽기 전용으로 메모리 공간에 넣고, 컴파일러가 알아서 메모리 주소를 결정하게 된다.

이러한 문자열을 '문자열 리터럴'이라고 한다.

 

7~9열은 포인터로 문자열을 선언하더라도 배열처럼 처리가 가능하다는 것을 보여준다.

 

 

 

 

- 문자열 입출력 함수

 

* scanf() 

공백을 만날 때까지 입력받는다.

 

* gets()

공백까지 포함하여 한 줄을 입력받는다.

실제로는 배열의 전체 범위를 고려하지 않고, 버퍼의 크기를 벗어나도 입력을 받기 때문에 보안상의 취약점이 있다고 한다. 

실무에서는 gets_s() 를 사용한다고 한다. ( 특정한 범위만큼만 정확히 문자를 입력받도록 만드는 함수라고 한다. )

 

* gets_s()

 

ex)

int main()

{

char a[100];

// gets(a);

// 공백의 여부에 상관없이 한 줄을 입력받게 된다. 

 

// gets_s(s, sizeof(a));

// 매개변수가 두 개 들어가는데, 두 번째 매개변수에서 얼마만큼의 크기의 버퍼에 넣어줄 것인지를 정해준다고 한다.

예시에서 사용된 sizeof 함수는 특정한 배열의 전체 크기가 얼마인지를 알려주는 함수이다.

배열의 크기를 100으로 지정했는데, 100 이상의 문자열을 입력받으면 프로그램에 오류 메시지가 뜨면서 종료된다.

 

printf("%s\n", a);

return 0;

}

------

 

gets_s 함수가 현재

xcode, web ide에서 모두 사용이 되지 않고

visual studio에서 #define _crt_secure_no_warnings 입력했을 때 실행이 되는지 한 번 확인해봐야 할듯..

오류때문에 찾아보다가 빡종..

----

윈도우 visual studio 2019 기준, 실행된다.

으........

이런 일이 있을 때마다 데스크탑을 켜야 하는건지..

분명 맥에서 방법이 있을텐데 개발환경 구축하는 방법을 다시 알아봐야 하는건가..

+++++++

결국 VS code로 새로 개발환경을 마련했지만

gets, gets_s 함수는 사용이 되지 않는다.

윈도우판 visual studio에서만 에러를 무시하고 강제로 실행 가능한 듯 하다.

 

빡침..

 

 

 

 

 

 

 

올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE