운영체제(Operating System, 이하 OS)는 사용자와 컴퓨터 하드웨어 사이의 소프트웨어 인터페이스를 지칭한다. OS는 프로그램 실행을 제어하고 다양한 리소스들(CPU, 메모리, 디스트, 디스플레이, 키보드, 마우스 등등)을 관리한다.


[그림 1] OS의 개념도


 운영 체제는 어디에나 있다. 주변에서 일상적으로 접할 수 있는 OS로는 다음과 같은 것들이 있다.


  • 윈도우즈 (PC의 OS)

  • 안드로이드 (구글 스마트폰의 OS)

  • iOS (애플사 아이폰의 OS)

  • OS X (애플사 맥PC의 OS)

  • 리눅스 (PC및 서버의 OS)


이들 중에서 안드로이드는 모두 리눅스와 연관이 있으며 OS X, iOS 는 BSD 라는 OS 계열이다. 그리고 리눅스와 BSD 모두 유닉스(unix)에서 유래되었다.




'맥,리눅스,윈도' 카테고리의 다른 글

리눅스의 파일 시스템  (0) 2015.05.16
리눅스의 커널(kernel)과 쉘(shell)  (0) 2015.05.16
리눅스(Linux) 소개  (0) 2015.05.16
자유 소프트웨어 재단 (FSF)의 설립  (0) 2015.05.16
유닉스(unix) 소개  (1) 2015.05.16
Posted by 살레시오
,

 디지털 신호(digital signal)은 이진 표현을 사용한다. 특히나 uC(마이크로컨트롤러) 프로그래밍에서는 이진수와 16진수를 많이 취급하게 되며, 이들 숫자를 조작하는 방법을 아는 것도 중요하지만 이에 앞서서 이진수와 16진수에 대한 개념을 이해하는 것도 중요하다.


이진수 (binary number)


 이진수 시스템은 두 수 (0,1)를 갖는 기수 2 시스템이다. 11010.11과 같은 이진수는 1과 0의 열과 2진 소수점으로 표현된다. 2진수와 같은 값을 갖는 10진수는 기수 2를 갖는 거듭제곱 수의 나열로 숫자를 확장해서 찾을 수 있다. 예를 들면



[표 1] 2의 거듭 제곱


  [표 1]에 2의 거듭제곱 을 기록하였다. 이 중에서 2의 10승까지는 외우는 것이 앞으로 프로그래밍하는데 있어서 여러모로 편리하다. 또한 8자리 이진수의 최대값은 255, 16자리 이진수의 최대값은 65,535 라는 것도 알아두면 나중에 C언어 변수의 가용 범위를 계산할 때 유용하다. 그 이상은 2의 10승이 약 1,000이라는 사실로 부터 추산할 수 있다.


 이진수에서 각 자리의 수를 비트(bit)라고 한다. 비트가 0일 때는 십진수로 변환하는 합에 영향을 미치지 않는다. 그러므로 10진수로의 변환은 비트가 1인 2의 거듭제곱수의 합으로 얻을 수 있다. 예를 들면 다음과 같다.


마이크로프로세서(혹은 컴퓨터 작업 시)에서는 2의 10승을 K(kilo), 2의 20승을 M(mega), 2의 30승을 G(giga), 그리고 2의 40승을 T(Tera)라고 한다. 따라서



이다.


16진수 (hexadecimal number)


 16진수를 사용하여 이진수를 더 간결하게 표현할 수 있는데 네 자리의 이진수를 한 자리의 16진수로 표현할 수 있기 때문이다. 그러므로 디지털 시스템에서는 2진수를 기술하기 위해 16진수를 많이 사용한다.

 16진수는 15까지 한자리로 표현되고 16이 되면 두 자리로 넘어간다. 따라서 10진 시스템에서 가져온 0, 1, 2, … 8, 9 등 열 개의 숫자와 10, 11, 12, 13, 14, 15를 하나의 숫자로 표현하기 위해 사용되는 문자 A, B, C, D, E, F를 갖는 기수 16 시스템이다.


[표 2] 십진수, 이진수, 팔진수, 16진수의 관계


[표 2]에 16진수 0부터 15까지를 이진수와 팔진수로 표현한 것을 기술하였다. 이중에서 이진수와 16진수와의 관계는 눈여겨 보아야 한다. 이진수에서 16진수로의 변환은 2진 숫자를 소수점부터 시작하여 왼쪽과 오른쪽으로 4자리씩 구분하여 쉽게 얻어진다.



십진수로의 변환


 십진수에서 이진수로 변환하는 편리한 방법은 주어진 십진수를 반복해서 2로 나누어서 그때마다 나머지를 써두고, 그 몫을 다시 2로 나누는 방법을 몫이 0이 될 때까지 반복한 후 아래에서부터 위로 나머지를 읽어가는 방법이다.


 예를 들어 십진수 103을 이진수로 변환하면 다음과 같다.



따라서 가 된다.


 이번에는 0.125 같은 십진수의 소수값을 이진수로 변환시키는 방법을 알아보자. 주어진 소수값에 2를 곱한다음 그 결과값이 1을 넘으면 1을 써두고 1을 넘지 않으면 0을 써둔 다음 그 너머지 소수값에 다시 2를 곱한다. 이것을 소수값이 없어질 때까지 반복한 다음, 써둔 결과를 위에서 부터 읽어 내려간다. 즉,



십진수에서 팔진수 혹은 16진수로의 변환도 8 혹은 16으로 나누고 곱한다는 것만 빼고 위와 동일하게 얻어진다.


보수 (complementary number)


 디지털시스템에서는 음수를 표현하기 위해서 2의 보수(2‘s complement)를 사용한다. 1의 보수(1’s complement)는 0과 1을 서로 바꾸어서 얻을 수 있다. 즉 0→1, 1→0으로 변환하는 것이다. 예를 들어서



n개의 자리수를 가진 이진수 N이 주어지면 그것의 2의 보수는 N이 0이 아닐때이고 N=0 일 때 0으로 정의한다. 2의 보수는 1의 보수에 1을 더하여 얻을 수 있다. 예를 들어



또한 2의 보수는 최하위자리 0과 첫 번째 자리 1을 모두 변하지 않게 하고 다른 모든 상위자리 비트에 있는 1을 0으로, 0을 1로 바꾸어 만들 수 있다. 그래서 1101100 의 하위 자리수에 있는 2개의 0과 첫번째 1을 그대로 두고 다른 4개의 상위자리의 비트를 0을 1로 1을 0으로 바꾸어서 0010100 를 얻을 수 있다. 보수의 보수가 원래의 값을 갖는다는 것도 중요한 사실이다.

 앞에서도 밝혔듯 디지털 시스템에서는 2의 보수로서 음수를 표시한다. 예를 들어 8bit 숫자 체계에서 -10을 얻으려면 +10의 2의 보수를 구하면 된다. 즉 00001010 의 2의 보수인 11110110 이 -10이 되는 것이다. 이러한 개념은 감산 하드웨어를 간략하게 하는데 매우 유용하다.


[표 3] 8비트 수의 2의 보수


따라서 8비트로 부호있는 정수는 -128 부터 +127까지 표현할 수 있다.


ATmega8(A) 강좌 전체 목록 >>>


c{am8},n{a8m0005}

'하드웨어 > ATmega8(A)' 카테고리의 다른 글

ATmega8(A)의 개략적인 특징  (0) 2015.06.03
AVR 개요  (0) 2015.06.03
마이크로컨트롤러의 I/O 장치들  (0) 2015.05.16
디지털 시스템의 메모리(memory) 분류  (0) 2015.05.16
마이크로프로세서의 분류  (0) 2015.05.16
Posted by 살레시오
,

 디지털 시스템은 프로세서만으로는 구성되지 않는다. 프로세서는 사람으로 비유하면 두뇌의 역할이고 이 프로세서와 데이터를 주고받는 외부 장치들이 있기 마련이다. 이렇게 프로세서와 데이터를 주고받는 외부장치들을 I/O 장치라고 하며 I/O는 입력(input)과 출력(output)의 줄임말로서 디지털 시스템에서 널리 쓰이는 용어이다.


 흔히 볼 수 있는 PC의 예를 들면 D램, HDD, ODD, 키보드, 마우스, 모니터, 프린터 등이 I/O장치에 해당되며 이들 장치는 모두 CPU와 데이터를 주고받으며 특정한 기능을 수행한다. 이 주변장치들은 프로세서 외부에 있을 수도 있고 프로세서와 같이 하나의 칩으로 만들어질 수도 있다.


 uC(microcontroller)에서 주변장치는 크게 메모리와 기타 장치로 구분할 수 있다. 메모리는 사용자가 작성한 프로그램과 데이터를 저장하는데 이용되고, 기타 장치의 예는 입출력포트, 타이머/카운터, analog-to-digital 변환기 (ADC), 직렬통신장치 등이다. 대부분의 프로세서는 위와 같은 주변장치와 통신을 위해서 두 가지로 구분되는 서로 다른 어드레스 영역을 가진다. 여기에서는 기타 장치에 대해서 간략하게 알아보도록 하겠다.


I/O 포트

 I/O 포트(port)는 프로세서와 외부 장치 간 신호를 주고받는 통로를 의미한다. 이 I/O 포트를 통해서 외부의 센서라든지 스위치와 같은 장치에서 발생하는 신호가 프로세서로 전달되며, 혹은 프로세서에서 발생된 신호를 외부 장치로 내보낼 때에도 I/O포트를 이용한다. 보통 uC는 I/O포트가 칩에 내장되어 있는 경우가 많다. AVR의 경우에는 이 I/O포트가 칩에 내장되어 있어 외부에 별도의 장치를 연결할 필요가 없다.

[그림 1] I/O 포트의 역할 개념도


인터럽트(interrupt)

 프로세서가 어떤 작업을 수행하고 있는 도중에 특수한 이벤트가 발생하면 수행 중인 작업을 중단하고 발생한 이벤트를 처리한 다음, 이전에 수행하던 작업으로 되돌아가 나머지 작업을 계속 처리하게 된다. 이러한 ‘즉시 처리해야 하는 특수한 이벤트의 발생’을 인터럽트(interrupt)라고 한다. 인터럽트가 발생하면 uC는 그것을 처리하는 작업들이 수록된 함수로 명령 수행 과정을 옮기게 되는데 이 함수를 인터럽트 서비스 루틴 (interrupt service routine, 이하 ISR)이라고 한다. 인터럽트는 디지털 시스템에서 굉장히 중요한 비중을 차지한다. ATmega8(A)도 외부인터럽트 2개를 포함한 18개의 인터럽트 소스가 있다.


타이머/카운터 (timer/counter)

 타이머(timer)는 시간과 관련된 장치로서 특정한 시간에 신호를 발생한다던가 혹은 정해진 주파수로 이벤트를 발생한다든가 하는데 사용된다. 카운터(counter)는 계수와 관련된 장치로서 펄스의 수를 센다든다 혹은 외부에서 발생하는 이벤트의 횟수를 센다든가 하는데 사용된다. AVR의 경우 대부분 8비트 혹은 16비트 타이머/카운터를 내장하고 있어서 이러한 시간과 관련된 신호를 생성하거나 주기적으로 이벤트를 발생하는데 사용할 수 있다. AVR의 타이머/카운터에 대해서는 7장에서 자세히 다루도록 한다.


A/D 변환기 (analog to digital converter)

A/D변환기는 아날로그(analog)신호를 디지털(digital)신호로 변환하는 장치이다. 디지털 시스템에서는 보통 A/D변환이라고 하면 연속적인 전압값을 디지털값으로 변환하는 것을 말하는 경우가 많다. 자연계나 외부의 물리값(예를 들어 온도, 밝기 등등)을 센서(sensor)를 통해서 이에 비례(반비례)하는 전압을 띠게 하고 이 전압을 A/D변환기를 이용하여 디지털 값으로 변환한 후 프로세서가 사용하게 된다.

 AVR의 경우에는 이러한 A/D변환기를 내장하고 있는 경우가 많아서 외부에 A/D변환기를 별도로 연결할 필요 없이 편리하게 사용할 수 있다. ATmega8(A)의 경우에도 A/D변환기를 내장하고 있다.

ATmega8(A) 강좌 전체 목록 >>>


c{am8},n{a8m0004}

Posted by 살레시오
,