전체 글 223

[시스템 프로그래밍 5-1] 어셈블리 기본 데이터 타입

어셈블리어에서 데이터를 정의하는 방법기본 데이터 타입기본적으로 사이즈를 정의하는 형태이다.실제로 크기가 같아도 다른 용도로 쓰기위해서 각자 용도를 고려해서 자료형을 정의하지만 어셈블리어에서는 오로지 크기의 관점으로만 데이터 타입이 주어진다.C 언어를 예로 들면 float 과 int는 모두 4바이트 또는 int 와 unsigned int 예시즉 어셈블러는 피연산자의 크기만 평가한다.WORD는 16 비트 unsigned int SWORD 16 bit signed intDWORD (DOUBLE WORD) : 32bit unsigned int즉 크기만 같다면 뭘 쓰던지 동작에 전혀 상관은 없다.이런식으로 분류가 되어있긴 하지만 실제 CPU의 관점에서는 사이즈만을 생각하기 때문에 DWORD로 데이터를 만들던 SD..

[시스템 프로그래밍 4강] 어셈블리 언어 문법 및 구성요소

예제1. 숫자 2개를 더하는 프로그램main PROC ; main 프로그램의 시작점 mov eax,5 ; cpu안에 있는 eax 레지스터 안에 숫자 5 배치 add eax ,6 ; 숫자 6과 eax를 더해서 11이라는 새로운 값 젝ㅇ INVOKE ExitProcess ,0 ; INVOKE 는 함수호출의 개념. ;운영체제에서 제공(윈도우 서비스)하는 함수인데, 프로그램 종료할 때 필요. ;인자로 0을 줬다는 의미이다. main ENDP ;주 절차의 종료 마커이다.숫자 5와 6을 더해서 eax에 저장하는 프로그램2. 변수 저장하기.data ; data segment 라는 의미 sum DWORD 0 ; sum이라는 변수에 0이 들어갔다. 4바이트 공간을 sum이라 부르고 0이 들어감 ;sum은 주소 즉 오프셋..

[디지털 논리 3강] 문자 인코딩 방식(ASCII,Unicode,BCD 바이너리 인코딩,Gray Code,Parity Bit)

숫자 표현은 부동소수점과 sign비트등을 이용해서 공부하였다. 이번강에서는 문자 인코딩에 대해서 다뤄보겠다. 문자의 인코딩은 숫자를 문자로 일대일로 맵핑한다. 문자 인코딩 ASCII Code : 아주 오래된 미국의 표준이다. 아스키코드는 7비트 인코딩이다!! (시험문제 ox문제) 8비트 아니다! 33개의 컨트롤 문자와, 95개의 읽을 수 있는 문자를 가지고 있다. 컨트롤 문자들은 몇개를 제외하고는 거의 사용되고 있지 않다.(역사적 이유때문에 남아있다.) 아스키코드는 다른 문자 인코딩의 기본이다. (UTF-8은 아스키를 능가하지만 아스키 기반임) 사진을 보면 undefine가 있는데 이건 국가마다 다르다고 한다. Extended ASCII Code(확장 아스키) 8비트만 사용 (1바이트) - 부호비트 삭제..

[시스템 프로그래밍 3-6] 입출력 시스템

입출력 시스템 입출력을 위해서 현대적인 컴퓨터 시스템에서는 우리는 하드웨어에 직접적으로 접근할 필요는 없다. 입출력을 통제하는 시스템 즉 os가 제공하는 fuction 들을 사용함으로써 i/o들이 일어나는 것이 일반적이다 i/o 는 서로 다른 입출력 레벨을 가지고 있다. 하드웨어에 직접 액세스하여 I/O를 수행할 필요는 없습니다. 대신 OS에서 제공하는 함수를 호출할 수 있습니다. 3가지의 입출력 레벨 1. High-level language functions c/c++/java등 언어를 말하는 것인데 여기서 사용하는 input output을 위한 함수들을 사용을 한다.(ex : printf) 이렇게 언어에서 제공하는 함수를 활용해서 입출력을 할 수가 있다. 이런 함수들을 사용하면 대부분 이식성이 높다...

[시스템 프로그래밍 3-5] 전형적인 X86 컴퓨터의 구성요소(마더보드, 메모리)

1. Motherboard 마이크로 컴퓨터의 심장이라고 봐도 된다. 이 마더보드(메인보드)에 컴퓨터의 모든 부품들을 연결해서 쓰는데 그런 부품들을 연결해주는 역활을 한다고 봐도 된다. 다양한 컴포넌트들이 버스라는 이름으로 연결되어있다. A CPU socket : cpu에 있는 핀들을 꽂을 수 있는 구멍들있는 판 같은 느낌, 소켓에서 지원하는 프로세서 유형에 따라서 모양과 크기가 다르다. Memory slots : 메모리를 꽂는 용도 BIOS (basic input–output system) computer chips(기본 입출력 시스템) : 아주 기본적인 시스템 소프트웨어가 들어가있는 칩, 즉 홀드시스템 소프트웨어. CMOS RAM : 바이오스가 실행될 때 저장이 되는 기본적인것들 예를 들어 부팅순서라던..

[시스템 프로그래밍 3- 4] 64-Bit x86-64 Processors

64-Bit x86-64 Processors 이렇게 네이밍을 했지만, 사실 x86 프로세스를 32비트로 확장한 것이다. 만든 곳은 amd라서 x86을 만든 곳은 인텔이지만 amd가 만들어서 이름이 amd64라고 불린다. Intel 64 and AMD64 processor (x64) 패밀리 라는 이름으로 불린다. 사실상 amd 64 또는 x86-64 , x64 등으로 불린다. 이 녀석은 32비트를 64비트로 확장한 것을 의미한다. 특징 Backward-compatible: 기존의 명령어와 32비트 x86에서 동작하던 명령어들이 모두 그대로 x86-64에서도 동작을 한다. 우리 수업에서는 컴퓨터에서는 32비트를 기준으로 공부를 할 꺼긴 해요 그러니까 딸딸 외우진 마세용 레지스터가 64비트이다. 그 이야기는 ..

[시스템 프로그래밍 3-3] 32 bit X86 processor의 메모리 관리

x86 프로세스의 메모리 관리 역시 리얼모드, 프로텍트 모드 등이 있다. (+ 버추얼 8086모드) 리얼모드에서 메모리 관리 8086 16비트 레지스터들과의 호환성이 있어야 하기 때문에 주소가 20비트 였고 레지스터는 16비트였지만 따라서 메모리가 1M까지 어드레싱 할 수 있었다. 32비트 프로세스에서 리얼모드를 사용하게 되면 이전과 호환성을 유지하기 위해서 cpu의 레지스터는 32비트를 그대로 가지고 있지만 8086에서 사용된 20비트 체계를 써야만 호환성이 유지가 되기 때문에 억지로 20비트 주소 버스를 사용할 수밖에 없었다. 멀티태스킹 불가했다. 다만, 주변 기기와의 동작을 인터럽트 형태로 처리 하기 위해서 해당 프로그램을 일시적으로 중단 할 수 있었다. 이 모드는 실제 물리주소에 접근을 하기 때문..

[시스템 프로그래밍 3-2] 32 bit register (레지스터) 상세 기능

기본 실행 환경 개요 컴퓨터의 메모리는 계층 구조를 가지고 있다. - 폰노이만 컴퓨터 구조에서 데이터를 주고 받는게 필수적이기 때문에 메모리 값을 읽어오는데도 시간이 오래 걸리고 (한클럭 만으로 되는게 아니라 최소 4클럭은 소요) cpu에서 일하는데 클럭소요, 메모리로 다시 돌려주는데도 시간이 소요된다. 이렇기 때문에 폰노이만 컴퓨터는 메모리와 cpu간의 데이터를 주고 받는 과정이 필수적이고 그렇기 때문에 cpu에 가까울수록 빠르게 만드는 구조를 선택했다. 따라서 최대한 덜 멀리 이동시키는 방식을 사용한다. 따라서 캐시에 즉 가까운 곳에 저장하는 방식으로 효율성을 높인 것이다. 램에서 쓰는 다이나믹 메모리보다 훨씬 속도가 빠르다. 대신 컨벤셔널 메모리를 사용한다. (캐쉬 레지스터에서 사용 비싸다.) 어셈..

[시스템 프로그래밍 3-1] X86 프로세서 작동모드(Real mode, protected mode, Address space)

32 bit x86 Processors 32비트 x86 프로세스라는 건 cpu속에 여러 레지스터가 들어있는데 각 레지스터의 최대 크기가 32비트(4byte)라는 것이다. 4byte를 담을 수 있는 메모리(레지스터)가 여러개 들어있다는 것을 의미! [1] x86 프로세스의 동작모드 세가지 모드가 존재한다. 왜 이런 3가지 모드가 등장했는지 배경을 알아야 각 모드들에 대한 이해를 높일 수 있다. 최소의 x86 프로세스의 초창기 즉 8086에는 Real-Address Mode만 존재하였다. 1. Real-Address Mode 과거 8086이 처음나올 때 RAM 이 640 KB 정도여서 크기에 대해서 설정한 값들이 당시에는 충분하다고 생각한 최대 크기들이 대부분 1MB정도였다. 또한 과거에는 멀티테스킹을 지원..

[시스템 프로그래밍 2-3] CPU 명령 실행주기 프로그램 실행 과정(bottleneck 병목현상,캐쉬의 계층화)

명령 실행 사이클[명령 실행 주기] CPU는 기계 명령을 실행하기 위해 미리 정해둔 일련의 단계를 거쳐야만 한다. 예시 명령어 포인터 레지스터에 실행하고자 하는 명령의 주소가 저장되어 있다고 가정한 상황. 첫번째로 CPU는 명령어 대기열 (instruction queue)에서 명령을 가져와야(fetch) 한다. 이 과정에서 어디서 명령어를 가져올지 그 주소를 이미 CPU는 알고 있기에 사실 빼오는게 아니라 요청하는 것과 같다. 이후 명령어 하나의 크기가 4bite라서 4바이트 만큼 명령어 포인터를 증가시켜서 명령 포인터를 업데이트 한다. 명령어를 가져왔으니 CPU는 명령을 디코딩한다. (사실 해석을 하는게 아니라 회로를 수행하는 것이다.) - 여기서 비트 패턴을 확인하고 만약 덧셈과 같이 피연산자가 필요..

728x90