1. 컴퓨터 동작 원리
일반적인 피씨 기준으로 설명 하자면..
1.1 컴퓨터에 전원이 들어 오면 미리 정의된 순서에 따라 메인 보드의 롬바이오스(롬메모리)에서 일정량의 데이터를 읽어 옵니다. (요기까지는 단순 무식하게 기계적으로 처리 됩니다.)
1.2 롬메모리에서 읽어온 일정량의 데이터가 씨피유로 전달 되면서 비로서 컴퓨터다운 처리를 시작합니다.
처음에 읽어 들인 데이터에는 컴퓨터가 처음에 해야할 일에 대한 명령이 들어 있습니다.
처음에 읽어들인 데이터(명령)에 따라 시피유가 작업을 끝내면 작업을 끝냈다는 신호를 내보내고, 그 신호를 받아서 롬 메모리에서 다음 데이터 블럭(위에 말한 일정양의 데이터)를 읽어 오고..
그거 처리하고 나면 또 다음 명령 읽어 오고 실행하고, 롬 바이오스의 데이터를 다 읽어 올때 까지 계속되는 반복입니다.
1.3 롬 바이오스에 들어 있는 명령은 기본적인 하드웨어 상태를 체크 하고, 마지막으로 운영체제를 기동시키도록 하는 명령이 들어 있습니다.
운영체제를 기동 시키도록 하는 명령을 받으면 플로피나, HDD, CD-ROM 등의 운영 체제가 담겨있는 저장 메체를 검사 하고, 운영 체제를 로딩 합니다.
여기까지의 과정을 '부팅' 이라고 합니다.
1.4 운영체제가 로딩 되는 과정 역시 기계적으로 이루어 집니다.
운영체제가 로딩되기 위한 기본 적인 정보는 플로피 디스크, 하드 디스크, CD-ROM의 특정 위치에 있도록 미리 약속되어 있습니다. (부트레코드 라고 합니다.)
운영체제 로딩 명령을 받으면 운영체제가 저장되어 있다고 추정되는 매체(플로피, 하드, 시디)의 특정 위치의 데이터를 읽어 옵니다. 읽어온 특정 위치에 부팅에 대한 정보가 있다면 그 정보에 따라 시피유가 동작 하게 되며, 여기서 부터 메인보드의 롬바이오스 대신 특정 운영체제에 따라서 컴퓨터가 동작 하게 됩니다.
2. 언어..
초기에는 컴퓨터 언어라는 것이 없었습니다.
무슥하게 컴퓨터에 2진 데이터를 직접 입력해 주었답니다.
예를 들어 더하기 명령이 '0101 0101' 이라면.. 1 더하기 2를 할때는
0000 0001, 0101 0101, 0000 0010 ( 1 + 2 )
이렇게 직접 명령을 입력 했고, 그 계산 결과 역시
0000 0011
이런식으로 나왔습니다.
CPU가 위의 명령을 받으면 다음과 같이 처리 합니다.
a. 먼저 0000 0001 이라는 데이터를 읽어 들입니다.
b. 0000 0001 이라는 데이터가 CPU의 내부 명령어 인지 판단 합니다.
c. 0000 0001 이라는 데이터는 CPU의 내부 명령어가 아니므로 CPU내부 메모리(주메모리)에 임시로 저장을 합니다.
d. 다음 데이터 블럭을 읽어 들입니다. 여기서는 '0101 0101' 이 됩니다.
e. 0101 0101 이 내부 명령어 인지 판단 합니다. 아! 이것은 바로 이전의 데이터와 앞으로 들어올 데이터를 더하 라는 명령 입니다.
f. 위의 명령에 따라 다음 데이터 블럭(0000 0010)을 읽어 내부 메모리에 저장 합니다.
g. a)에서 읽어와 c)에서 저장해 놓았더 데이터와 새로 읽은 데이터를 더합니다.
h. g)에서 더한 결과를 내부 메모리에 저장 합니다.
( 원래는 더 복잡합니다만 개념상 간단히 했습니다 ^^;; )
cpu의 동작 방식 역시 위와 같이 단순 무식 합니다. 다만 이 짓거리를 겁나게 빨리 할 뿐이죠.
이렇게 2진 데이터를 직접 입력하는 방식이 너무 불편해서.. 어셈블리 라는 언어가 개발 되었습니다.
어셈블리의 명령어는 2진 데이터와 1대 1로 대응 되는 언어 입니다.
위에서 더하기 명령이 '0101 0101' 이라고 했는데 이대로는 사람이 알아보기 너무 어렵습니다.
그래서..
0101 0101 = add
0000 0001 = 1
0000 0010 = 2
0000 0011 = 3
이런식으로 표현이 가능한 언어를 만든 겁니다. 이제 위에 기계어를 어셈블러로 해보면..
1 add 2
이렇게 됩니다. 이진 데이터 보다 훠~~얼씬 보기 쉬워졌죠.
초기에는 오퍼레이터(타자만 전문으로 치는 사람 ^^;;)가 '1'이라는 키보드를 누지르면 컴퓨터에 '0000 0001'이라고 입력되도록 기계적으로 만들었습니다.
즉, 프로그램을 한자씩 직접 cPU에 입력했습니다. 중간에 오타 한번 치면 처음부터 다시 입력해야 했습니다. ㅡㅡ;;
그 다음이 천공 카드 입니다. 타자기에 '1' 이라고 치면 종이 카드에 0000 0001 이라고 입력이 됩니다.
이런 카드를 주~~욱 만들어서 차례대로 천공카드 리더기에 집어 넣는 겁니다.
그럼 리더기가 카드를 읽어서 CPU에 명령을 전달 하는 겁니다.
이 경우 카드에 데이터가 잘못 입력되면, 그 카드 한장만 새로 만들어 넣으면 되니, 처음 방식에 비해서 훨씬 효율적이었습니다.
천공 카드 다음에는 마그네틱 테입, 플로피, 하드 디스크, 시디롬, 디비디 등등의 데이터 저장 매체가 만들어 졌지만.. 기본적인 원리는 지금도 변함이 없습니다.
프로그래밍 언어라는 것은 사람이 좀 보기 편한 형식으로 명령을 써 놓으면 그것을 CPU가 알아듣는 이진 언어(기계어)로 번역을 해 주는 것을 말합니다.
초기의 직접 입력하는 어셈블리를 이용해서 어셈블리를 기계어로 번역하는 어셈블러 라는 언어가 만들어 졌고,
요걸 좀더 사람이 보기 편하게 발전 시키고, 발전시키고, 해서.. 지금의 프로그래밍 언어가 만들어 졌습니다.
아.. 회의 들어 갑니다. ㅡ,.ㅡ;;
일반적인 피씨 기준으로 설명 하자면..
1.1 컴퓨터에 전원이 들어 오면 미리 정의된 순서에 따라 메인 보드의 롬바이오스(롬메모리)에서 일정량의 데이터를 읽어 옵니다. (요기까지는 단순 무식하게 기계적으로 처리 됩니다.)
1.2 롬메모리에서 읽어온 일정량의 데이터가 씨피유로 전달 되면서 비로서 컴퓨터다운 처리를 시작합니다.
처음에 읽어 들인 데이터에는 컴퓨터가 처음에 해야할 일에 대한 명령이 들어 있습니다.
처음에 읽어들인 데이터(명령)에 따라 시피유가 작업을 끝내면 작업을 끝냈다는 신호를 내보내고, 그 신호를 받아서 롬 메모리에서 다음 데이터 블럭(위에 말한 일정양의 데이터)를 읽어 오고..
그거 처리하고 나면 또 다음 명령 읽어 오고 실행하고, 롬 바이오스의 데이터를 다 읽어 올때 까지 계속되는 반복입니다.
1.3 롬 바이오스에 들어 있는 명령은 기본적인 하드웨어 상태를 체크 하고, 마지막으로 운영체제를 기동시키도록 하는 명령이 들어 있습니다.
운영체제를 기동 시키도록 하는 명령을 받으면 플로피나, HDD, CD-ROM 등의 운영 체제가 담겨있는 저장 메체를 검사 하고, 운영 체제를 로딩 합니다.
여기까지의 과정을 '부팅' 이라고 합니다.
1.4 운영체제가 로딩 되는 과정 역시 기계적으로 이루어 집니다.
운영체제가 로딩되기 위한 기본 적인 정보는 플로피 디스크, 하드 디스크, CD-ROM의 특정 위치에 있도록 미리 약속되어 있습니다. (부트레코드 라고 합니다.)
운영체제 로딩 명령을 받으면 운영체제가 저장되어 있다고 추정되는 매체(플로피, 하드, 시디)의 특정 위치의 데이터를 읽어 옵니다. 읽어온 특정 위치에 부팅에 대한 정보가 있다면 그 정보에 따라 시피유가 동작 하게 되며, 여기서 부터 메인보드의 롬바이오스 대신 특정 운영체제에 따라서 컴퓨터가 동작 하게 됩니다.
2. 언어..
초기에는 컴퓨터 언어라는 것이 없었습니다.
무슥하게 컴퓨터에 2진 데이터를 직접 입력해 주었답니다.
예를 들어 더하기 명령이 '0101 0101' 이라면.. 1 더하기 2를 할때는
0000 0001, 0101 0101, 0000 0010 ( 1 + 2 )
이렇게 직접 명령을 입력 했고, 그 계산 결과 역시
0000 0011
이런식으로 나왔습니다.
CPU가 위의 명령을 받으면 다음과 같이 처리 합니다.
a. 먼저 0000 0001 이라는 데이터를 읽어 들입니다.
b. 0000 0001 이라는 데이터가 CPU의 내부 명령어 인지 판단 합니다.
c. 0000 0001 이라는 데이터는 CPU의 내부 명령어가 아니므로 CPU내부 메모리(주메모리)에 임시로 저장을 합니다.
d. 다음 데이터 블럭을 읽어 들입니다. 여기서는 '0101 0101' 이 됩니다.
e. 0101 0101 이 내부 명령어 인지 판단 합니다. 아! 이것은 바로 이전의 데이터와 앞으로 들어올 데이터를 더하 라는 명령 입니다.
f. 위의 명령에 따라 다음 데이터 블럭(0000 0010)을 읽어 내부 메모리에 저장 합니다.
g. a)에서 읽어와 c)에서 저장해 놓았더 데이터와 새로 읽은 데이터를 더합니다.
h. g)에서 더한 결과를 내부 메모리에 저장 합니다.
( 원래는 더 복잡합니다만 개념상 간단히 했습니다 ^^;; )
cpu의 동작 방식 역시 위와 같이 단순 무식 합니다. 다만 이 짓거리를 겁나게 빨리 할 뿐이죠.
이렇게 2진 데이터를 직접 입력하는 방식이 너무 불편해서.. 어셈블리 라는 언어가 개발 되었습니다.
어셈블리의 명령어는 2진 데이터와 1대 1로 대응 되는 언어 입니다.
위에서 더하기 명령이 '0101 0101' 이라고 했는데 이대로는 사람이 알아보기 너무 어렵습니다.
그래서..
0101 0101 = add
0000 0001 = 1
0000 0010 = 2
0000 0011 = 3
이런식으로 표현이 가능한 언어를 만든 겁니다. 이제 위에 기계어를 어셈블러로 해보면..
1 add 2
이렇게 됩니다. 이진 데이터 보다 훠~~얼씬 보기 쉬워졌죠.
초기에는 오퍼레이터(타자만 전문으로 치는 사람 ^^;;)가 '1'이라는 키보드를 누지르면 컴퓨터에 '0000 0001'이라고 입력되도록 기계적으로 만들었습니다.
즉, 프로그램을 한자씩 직접 cPU에 입력했습니다. 중간에 오타 한번 치면 처음부터 다시 입력해야 했습니다. ㅡㅡ;;
그 다음이 천공 카드 입니다. 타자기에 '1' 이라고 치면 종이 카드에 0000 0001 이라고 입력이 됩니다.
이런 카드를 주~~욱 만들어서 차례대로 천공카드 리더기에 집어 넣는 겁니다.
그럼 리더기가 카드를 읽어서 CPU에 명령을 전달 하는 겁니다.
이 경우 카드에 데이터가 잘못 입력되면, 그 카드 한장만 새로 만들어 넣으면 되니, 처음 방식에 비해서 훨씬 효율적이었습니다.
천공 카드 다음에는 마그네틱 테입, 플로피, 하드 디스크, 시디롬, 디비디 등등의 데이터 저장 매체가 만들어 졌지만.. 기본적인 원리는 지금도 변함이 없습니다.
프로그래밍 언어라는 것은 사람이 좀 보기 편한 형식으로 명령을 써 놓으면 그것을 CPU가 알아듣는 이진 언어(기계어)로 번역을 해 주는 것을 말합니다.
초기의 직접 입력하는 어셈블리를 이용해서 어셈블리를 기계어로 번역하는 어셈블러 라는 언어가 만들어 졌고,
요걸 좀더 사람이 보기 편하게 발전 시키고, 발전시키고, 해서.. 지금의 프로그래밍 언어가 만들어 졌습니다.
아.. 회의 들어 갑니다. ㅡ,.ㅡ;;
댓글 달기