컴퓨터의 구조와 역사
폰노이만 구조: 프로그램과 자료를 실행전에 메모리에 저장해놓고 프로그램이 실행되면 메모리에서 읽어드려 실행하는 거 저장이나 변경사항을 다시 기억장치에 저장하는 방법
8080:8bit 마이크로 프로세서,일반 목적용 컴퓨터를 위하여 설계
8086:16bit 마이크로 프로세서
8bit 의 한계
8bit 로 최대 0~255에 수만을 표한할 수가 없는 문제가 있다.
하지만 16bit 는 0~65535 까지의 수 를 다룰 수 있어 8bit보다 더 높은 효율의 장점을 가지고 있다.
그럼 16bit 8bit가 무엇일까.
16bit 마이크로프로세서라 하면 16비트 데이터버스를 의미 하는 것으로 데이터를 전송을 위해 16개의 핀을 사용한다는 것이다.
전송하기위해서 데이터 버스를 사용한다면 위치를 참조하기위해 어드레스 버스를 사용한다.
8086에 경우 16bit 마이크로프로세서에 20bit 어드레스 버스를 사용한다.
이는 보다 많은 메모리에 엑세스 하기 위해서이다.
하지만 8086에 경우 모든 레지스터가 16bit 이어서 20bit까지 표현을 못하는 문제를 가지고 있다. 이를 해결하기위해서 레지스터 2개를 조합하여 문제를 해결할 수 있었다.
하지만 이 방법에도 문제가 있는데 8086에 경우 레지스터 개수 자체가 얼마 되지 않아 문제가 발생했다, 이러한 문제를 해결하기위해 세그먼트라는 방법을 고안해냈다.
80286: 8086에 빠른 속도와 더 많은 24bit어드레스 버스와 함께 보호보드 라는 것이 적용되었다.
80360: 80386부터 본격적으로 32bit환경이 조성되었다, 어드레스 버스, 데이터버스, 레지스터등 모두 32bit로 구성되었다. 최대 표현 정수 데이터가 40억 정도 까지 늘어나 효율이 극대화 되었고 또한 MMU(메모리 관리장치)가 포함됨으로 메모리 할당 등을 하드웨어가 부담으로 소프트웨어에 부담을 덜어 주었다.
또한 80386은 시스템 레지스터가 추가되었는데
CR0 - 페이징,보호모드,실제 모드 관리,
cr0 레지스터에 pe비트가 1로 세팅되면 보호모드, 0이면 실제모드
CR2 페이지폴트시 마지막 주소를 가리키고 있음
CR3 페이지디렉토리 베이스 주소를 가지고 있다.
또다른 시스템 레지스터 그룹인
DR0~DR3
브레이크 포인터에 관련된 레지스터
TLB(Translarion Lookaside Buffer) :
페이징 작업시 가상 메모리의 내용을 실제 메모리값으로 변경하려면 시간이 많이 걸린다. 이것을 해결하기위해 고안된 방법으로 캐쉬와 비슷한 방법인데. 일정개수 만큼 버퍼에 보관하여 변화하는데 드는 시간을 줄여준다.
80486 부터는 구조적 변화보다는 호환성 위주로 발전.
명령어 파이프 라인 구조를 채택함
- 병령 처리가 가능함
명령어 파이프 라인이 원활하게 동작하기위해서 원할한 데이터 공급은 필수인데 이것을 해겨하기위해 8byte L1캐쉬를 마이크로 프로세서 내부에 추가하였다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
컴퓨터의 구조
컴퓨터는 여러가지 장치가 조합하여 사용할수있다. 입력장치 출력장치 연산장치보조기억장지 주기억장치 제어장치가 필수적으로 필요하다. 그리고 이를 총괄적으로 제어할수있는 소프트웨어가필요한데 바로 시스템소프트웨어이다.바로운영체계이다. 그리고 운영체계에서 사용할 응용소프트웨어도 필요한데 흔이말하는 프로그램이다.
이를 사진으로 정리하겟다.
먼저 하드웨어의 중앙처리장치를 보자면 제어장치와 연산장치 주기억장치를 사용하는데 시피유와 램을 같이사용하여 연산을 처리한다. 연산장치에서 수를 처리했는데 이것을 기억시키지못하고 소멸시킨다면 아무런이유가없지않은가
이 수를 기억하기위해 주기억장치를이용하고 수를 연산하기위해 시피유를사용한다.참고로 주기억장치에는 명령어와 결과가 저장된다. 그리고 이시퓨유먼저살펴보자자자
시피유는 연산장치 제어장치 레지스터로 이루어져있는데 이것을 이어주는 것이 바로 내부 cpu버스이다.
그런데 시피유에서 정말로 수를저장하지못할끼? 가능하다. 레지스터에 저장할수있다. 그런데 왜 구지 주기억장치를사용할까? 바로 시피유의 레지스터는 크기도작고 임시로 기억하기떄문이다. 허나 주기억장치도 임시적으로 기억할뿐이다.
그냥컴퓨터나껏다키면 바로 소멸되기떄문이다.
이것을저장하기위해 보조기억장치가잇다.보조기억장치는 컴퓨터 전원이꺼져도 기억하며 언제든지 불러올수있다.
시피유가 연산을하기위해일시적으로 진동하는것을 클록이다고한다. 이쿨럭을hz로 표시하며 한번진동하는데1hz로쓴다.
1초에 10의 6승을 진동하는것을 mhz라고하고 1초에 10의 9승을진동하는것을 ghz라고한다.
명령어처리속도는 1초에100만번을진동하는것을 mips라고한다.
연산장치는 산술 및 부울논리연산기와 상태플러그 이동기 보수기로 구성되어있으며 연산기에서는 산술놀리연산장치와alu가있는데 산술논리연산기는 덧셈뺄셈 과같은연산과 and ,xor,or등 논리연산을계산하는 디지털회로이다.alu는 실제적인 논리연산을한다.그리고 상테를표시하는플러그와 음수 0 양수 등을 표시한다.alu는 이동기와 보수기로 되어있고 이동기의 비트이동은 2를곱하거나 나누는것으로 해석된다. 보수기에서는 데이터의 보수연산을하며 2의 보수는 덧셈뻴셈을 빨리한다.
레지스터의 종류에는 데이터, 주소.,범용,부동,상수,특수,명령,색인레지스터가있다. 데이터레지스터는 정수데이터값을저장할수있고 주소레지스터는 기억장치의 주소를기억할수있다.범용레지스터는 데이터와주소를모두기억할수있다.부동레지스터는 부동소수점을저장하기위해사용된다.상수레지스터는 0이나1고정된데이터값을저장하기위한레지스터이다.특수레지스터는 실행중인레지스터의상테를저장하는레지스터이다.(프로그램카운터,상테레지스터)명령레지스터는 현제실행중인명령을기억한다.색인레지스터는 실행중인 피연산자의주소를계산하는데사용한다.
제이및상태레지스터도있다. 이레지스터들은 일반사용자에게 보여지는 레지스터이다.일반목적용레지스터 프로그래머에게의해 여러용도로사용되는레지스터 데이터레지스터 데이터저장에만사용할수있는레지스터주소레지스터 주소저장용으로 쓰이는레지스터 스텍포인터 스텍의 최상위주소를기억하는레지스터 부포비트 경에는 음수인지양수인지표시 영(제로)비트해당데이터가 0이라는것을알려준다.오버플로우비트 연산중에 오버플로우가발생하엿다는것을 알려준다.
상테레지스터에는 많은비트로이루어저있는데 부호비트 영비트 올림수비트 동등비트 오버플로우비트 인터럽트비트가 있다. 부호비트는 음수인지양수인지구별할떄쓰이는비트이며 영비트는 데이터가 0인지 구별할떄시이며 올림수비트는 해당데이터가 자리올림이발생하엿다는것을알려준다.동등레지스터는 비교대상과 해당레지스터가 동일하는것을알려준다. 오버플로우비트 해당비트에서 오버플로우가발생햇다는것을 알려준다. 안터럽트비트 인터럽트가능여부를알려준다.
프로그램상태비트에는 디렉션비트 트랩비트 보조올림수비트 패리티비트 수퍼바이저비트가있다. 디렉션비트는 문자열조작에서 참일경우 자동으로감소하고 거짓일경우 자동으로 증가하는 비트이다.트랩비트참일경우에 한명령어실행시 인터럽트발생 보조올림수비트 연산결과가 4비트를 넘어섯을경우에만 참이된다. 이진화 십진법연산에 사용된다.
패러티 비트 연산결과가 1의 값을 같은 비트의 수가 짝수일떄만 참이다.수퍼바이저비트슈퍼바이저비트는 시피우가 수퍼바이저모드혹은일반사용자보드에서실행준인지 나타내는비트이다.
제어장치에서는 주기억장치에서 받은명령어코드를 해독하고 제어신호를 해당장치에 전달하는 역활을수행한다.
명령어는 연산코드와기억주소로이루어져있는데 연산코드에는 실행될 코드가지정되어있고 기억주소는 해당연산을수행할 데이터가 저장되어있는주소를 가르킨다.제어장치는 버퍼레지스터와 명령어레지스터 해독기 기억장치주소레지스터와 프로그램카운터로이루어져있다.그런데 내부시피유버스는 왜있는것일까? 그냥 장치끼리바로연결해서사용하면안될까? 내부시피유버스를 사용하는이유는 장치들간의 속도차떄문이다.시피유간의 속도차는 극복할수있지만 왜부장치의속도차는극복할수없다. 따라서 내부시피유버스가 이를 조절하는 버퍼역활을한다.
주기억장치에서 명령레지스터까지 갈려면 처리속도가 미세하게있으므로 버퍼를지나야하는데 연산과정은아레와같다
명령어레지스터에는 명령어를저장하고 해독기는 명령어를해독하고 주소레지스터에는 당연히 명령어가저장된 주소를기억한다.프로그램카운터는 다음수행할 명령어의주소를기억하고있다
주기억장치에서는 텍스트영역 데이타영역 bss영 코드영역이있다.
메모리구조를 c언어 형테로 보았다. 먼저 초기화되지않은 변수는 bss에 저장이되고 선언되고 초기화가된변수는 데이터영역에 저장된다. 텍스트영역에는 변수가 명령어를 사용하여 시피유를통해 연산할 명령어가저장된다. 여기서 시피유에전달될명령어가 저장된다.스텍영역에는 지역변수나 메개변수가 저장되는 곳이다.함수호출이끝나면 소멸한다.힙영역에는 동적메모리를 할당한다 프로그래머가 할당해재를해주어야한다. 프로그램이끝나면 운영체계에서 해제해주기도한다.
텍스트영역위에 코드영역이있는데 그곳에는 프레임 포인터와 리턴주소가있다. 프레임 포인터에는 프로그램이 시작되었을때 주소값이저장되어있다. 프로그램이끝나면 이주소로 복귀한다. 리턴주소는 프로그램이끝날주소를기억하고있다. 참고로 오버플로우공격이 이 리턴주수로를 위조하여 쉘코드를얻어내는공격이다.
컴퓨터의 역사
컴퓨터는 계산기에서 시작되었다.
사람들은 복잡한 계산을 대신할 것이 필요햇고 그에 맞추어 계산기가 나타낫다.
세계 2차 대전과 대전중에 기계식 회로와 아날로그 회로에서 전자회로와 디지털 회로로 바뀌는 변화가 있었고.
시간이 지나면서 제 1세대 진공관이 나타나면서 애니악이 만들어졋다. 하지만 애니악의 진공관은 유리일 뿐더러 잘 부서졋고 부피도 커서 공간을 많이 차지하엿다. 18000여대의 진공관과 1500개의 계전기를 사용하기 때문에 전력 소비가 엄청낫다. 이 외에도 문제가 많았지만 트렌지스터가 개발된뒤로 많은 문제가 해결 되었다. 트렌지스터는 매우 작을 뿐더러전기소모도 적었고 유리가 아니어서 깨질 위험도 없었다. 제2세대 트렌지스터가 계발 된 뒤로 많은발전이 있었지만 아직도 많은 트렌지스터가 필요하엿고 개인용으로 쓰기에는 벅찻다. 그 뒤로 제3세대 ic가 개발되었고 그 뒤로 제4세대인 lsi 고밀도 집적도를 높혓다. 이 뒤로 컴퓨터의 크기는 매우 작아졋다.
이 뒤로 슈퍼 컴퓨터가 출시뒤었고 lsi같은 하드웨어적 공간이 줄어듬으로써 1980년대에 imb에서 첫 개인용 컴퓨터를 내노았다.하지만 사람들이 쓰기에는 불편하엿고 cpu에 따라 프로그램도 달라서 많은 불편함이 있었다.
개인용 컴퓨터가 보급됨에 따라 마이크로소프트의 windows가 나왓고 에플의 ios와 같은 운영체계가 나왔다.
그리고 곧컴파일러가 나오면서 프로그래머들은 cpu마다 다른 프로그램을 만들필요가 없었고 프로그래밍 언어가 나오면서 프로그램 개발은 더욱 편리해 졋다.프로그래밍 언어는 a-b-c 순으로 발달 하엿고 후에 자바나 파이썬같은 새로운언어가 나왓다. c++도c에서 발전하엿단으미로 ++이붙은것이다.
현제 컴퓨터는 4세대 컴퓨터 이며 5세대 컴퓨터를 개발중이다.
'스터디 > Windows 구조와 원리 OS를 관통하는 프로그래밍의 원리' 카테고리의 다른 글
실행 압축) 실행압축과 일반압축 (비 손실압축과 손실 압축) (0) | 2014.09.06 |
---|---|
기계어의 구성 (0) | 2014.07.15 |
데이터의 표현과 메모리 구조 (0) | 2014.07.15 |
목차 및 책 구성 (0) | 2014.07.15 |
스터디 카테고리에 관한 설명 (0) | 2014.07.15 |