소프트웨어란 무엇일까요?
영화 매트릭스를 보면 아래와 같이 가상 공산이 숫자료 표현되어 있는 것을 볼수 있습니다.
010101 이 난무하고 있다고 볼수 있죠!!
저는 정말 소프트웨어가 무엇인지 궁금했습니다.
여기서 작게나만 통찰력을 줄수 있는 내용을 적고 싶습니다.
소프트웨어를 위키에서 찾으면 아래와 같습니다.
https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4 컴퓨터 소프트웨어(computer software, 혹은 간단히 소프트웨어, 문화어: 쏘프트웨어, 순화 용어: 무른모)는 저장장치에 저장된 특정한 목적의 하나 또는 다수의 컴퓨터 프로그램을 뜻한다. 프로그램 소프트웨어는 컴퓨터 하드웨어에 직접 명령어를 주거나 다른 소프트웨어에 입력을 제공함으로써, 그것이 수행하도록 구현된 기능을 수행한다. |
위의 말에서 조금더 직접적이고 쉽게 표현을 하면 저는 아래와 같이 소프트웨어를 정의하고 싶습니다.
소프트웨어는 어떠한 목적을 가지고 동작시키기 위한 명령어의 집합이다.
아직도 어렵네요. 역시 예를 한번 들어서 설명하는게 더 쉽겠네요!
저기 검은 박스안에는 CPU와 메모리가 들어 있습니다.
저는 저기 검은박스에 소프트웨어를 만들어서 메모리에 넣을 것입니다.
메모리에 소프트웨어는 아래와 같이 만들었습니다.
910000F7 D9F29820 99FF9820 .......
위와 같은 소프트웨어를 만들었습니다.
그리고 이것을 위와 같이 0x80024A6 메모리 영역에 쭉 다운로드하여 위와 같이 쓰여진 것을
확인하수 있씁니다.
다른것은 잊어버리고, 아래와 같은 소프트웨어를 저 검은 박스안에 메모리에 넣었습니다.
910000F7 D9F29820 99FF9820 ....
결국 저것은 16진수이기 때문에 2진수로 표현하면 아래와 같이 써질것입니다.
1001 0001 0000 0000 0000 0000 1111 0111 .....
메모리는 1을 표현하기 위해 전압을 채워 넣습니다. 0은 전압이 빠져있는것이고요. (문론 반대의 경우도 있습니다.)
그런데, 저 소프트웨어는 어떠한 목적을 하도록 만들었을까요?
MCU를 만든 회사는 저 신호를 아래와 같은 목적으로 동작하도록 약속했습니다.
이것을 하나하나 분석할 생각은 없습니다.
요약하면 다음과 같습니다.
저 검은 박스에 다리가 달려 있는제 저 다리를 Ground 시켜라!!!
회로로 아래와 같습니다.
자시 말해서 MCU안에 회로를 위와 같이 동작하도록 만들라는 소프트웨어 입니다.
그런데, 저 검은색 박스의 회로를 아래와 같이 완성하면 LED에 불이 들어옵니다.
저 검은 박스(MCU)안에는 CPU라는 컴퓨터와 메모리가 들어 있습니다.
CPU는 메모리의 아래 명령어들을 읽어드리고,
이 연산을 수행하고, 결과물을 저장합니다.
다시 말해서 CPU는 저 코드값을 읽어서,
특정 메모리 주소에 0을 적는 행위를 한것이고
공교롭게도 그 특정 메모리 주소에 0을 써넣으면
저 빨강 pin이 Ground로 설정이 되는 소프트웨어 였던 것입니다.
그리고 저 핀과 LED 전구가 회로가 연결되어 있어서
결론적으로는 전원이 들어가면 LED가 켜지는 동작을 하게 됩니다.
그렇습니다.
저는 아래와 같은 소프트웨어를 만들어서
LED 촛불을 키는 소프트웨어를 만들은 것입니다. ^^
그러면 제가 저 16진수로 이루어진 값들을 하나하나 문서를 살펴서 작성했을까요?
아닙니다.
저는 아래와 같은 코드를 작성하였고
port->OMR.U = action << pinIndex;
이것을 컴파일러라고 불리는,
즉 MCU가 알아 들을수 있는 언어로 바꾸어주는 컴파일러를 동작시켜서 아래 소프트웨어를 만들어
놓은 것입니다.
컴파일러도 소프트웨어 입니다 ^^
고급언어를 기계언어로 바꾸어주는 소프트웨어요 ㅎㅎ
추후, 컴파일러 어셈블러 등과 같은 내용도 정리하여 포스팅할께요.
정리하면
소프트웨어는 어떠한 목적을 수행하기 위해 만든 명령어의 집합니다.
소프트웨어는 0101010과 같은 이진수로 이루어져 있고
0은 메모리의 한 부분을 방전시켜서,
1은 메모리의 한 부분에 전압을 충전시켜서
표현하고,
내용을 기록한다.
그리고 CPU는 이러한 메모리의 전압값을 읽어서,
연산하고
특정 메모리에 결과값을 적는다.
우리는 이러한 특성을 이용하여 정말 다양한 특정 목적에 맞는 동작을 구현한다.
어떠한 목적을 수행하기 위한 명령어의 집합을 만든다 ㅎㅎ
'Embedded SW > Embedded SW Introduction' 카테고리의 다른 글
05. SPI 통신이란 무엇인가? (1) | 2021.07.16 |
---|---|
04. CAN(Controller Area Network) 이란 무엇일까? (0) | 2021.07.15 |
03. 인터럽트(Interrupt)와 폴링(Polling) 이란 무엇일까? (2) | 2021.07.14 |
01. MCU (Micro Control Unit)란 무엇인가? (1) | 2020.03.28 |
00. 임베디드 SW란 무엇인가? (0) | 2020.03.15 |
댓글