Computer 7

운영체제 12주차

뭐했다고 벌써 12주차죠? ㄴㄴ 과제 제목은 CPU 스케줄링 --- 메모리 주소 (주기억장치!) 18로 나뉜 메모리의 각 영역은 메모리 주소로 구분하는데 보통 0번지부터 시작 CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터(MAR)를 사용 갑자기 가상 메모리를 사용한다는데 이게 무슨 뜻인지 모르겠어요 졸려 죽겠음 굉장히 큰 하드의 용량을 좀 떼고 그걸 가상기억장치로 사용을 하는데 아무튼 지금 얘기 아님 그 위에꺼? 폰노이만 구조가 먼저 나오고 메모리 주소 내용이 나와야 한다. 그니까 어쨌든 뭐냐 MAR 사용하게 되었다가 중요. 메모리 관리의 이중성 프로세스 입장에서는 메모리를 독차지 하려고 하고, 메모리 관리자 입장에서는 관리를 효율적으로 하고 싶어함 엄..

Computer 2019.11.22

[asm] INT 21H

#시작하기 전에, 왜 기존에 썼던게 날아갔는지 모르겠어요. 오프로 정리해뒀던 문서까지 날아가서 멘탈 조금 깨질 것 같네요 야호 어셈블리도 다른 언어들이 함수를 미리 선언한 후 사용하는 것처럼 인터럽트를 사용하여 정의한 함수를 호출할 수 있다. INT 21H는 MS-DOS API로, MS-DOS 및 기타 도스 호환 운영 체제에 쓰이는 API이다.도스 API의 대부분은 INT 21H를 통해 호출할 수 있다. 해당 도스 서비스에는 키보드 입력, 비디오 출력, 디스크 파일 접근, 프로그램 실행, 메모리 할당 등이 있다. 도스에 쓰이는 다른 인터럽트 벡터는 다음과 같다. 인터럽트 내용 20h 프로그램 끝내기 21h 주요 DOS API 22h 프로그램 끝내기 주소 23h Ctrl-C 핸들러 주소 24h 심각한 오류..

Computer 2019.10.01

GDB 실습하면서 정리하는 명령어

GDB 실행 : gdb [파일 이름] gdb -q [파일 이름] : gdb 버전 정보에 대한 출력이 없어짐 gdb --args [파일 이름] [arguments~~] : 파일 실행 시, 인자값을 전달할 수 있음. q, quit : gdb 프로그램 종료 disassemble, disas [함수명] : 해당 함수 부분에 대해 disassemble 진행 * gdb의 기본 출력은 AT&T asm 문법을 따른다. intel 문법으로 확인하고 싶으면 다음 명령어를 입력하면 된다. * set disassembly-flavor intel b, break *[주소값] : 해당 주소에 브레이크 포인트를 설정한다. 함수명을 주소값 대신 설정 가능하다. 이 때는 *를 달지 않는다. break [주소값] [조건문] : 주소값에..

Computer 2019.09.25

메모리 구조

프로그램이 실행되기 전에 먼저 메모리에 로드되어야 한다. 그리고 프로그램 내에서 사용할 많은 변수들을 저장할 공간도 필요하다. 운영체제는 프로그램을 실행하기 위해 많은 메모리 공간을 제공하는데, 대표적으로 다음과 같다. 코드 영역 실행할 프로그램의 코드 데이터 영역 전역 변수 정적 변수 힙 영역 사용자의 동적 할당 스택 영역 지역변수 매개변수 코드 영역에 가까울 수록 낮은 주소이고, 스택 영역에 가까울수록 높은 주소를 갖게 된다. 힙 영역과 스택 영역은 고정되어있지 않는데, 스택 영역은 컴파일 타임에 따라, 힙 영역은 런 타임에 따라 크기가 결정된다. 같은 영역을 공유하게 되는 만큼 어느 한쪽이 과도하게 메모리를 많이 쓰게 된다면 각각 스택 오버플로우, 힙 오버플로우가 발생하게 된다. 코드 영역 - 프로..

Computer 2019.09.24

Register - 간단 개념 정리

운영체제 개발이든, 리버싱이든 여러 작업을 하다 보면 제일 많이 접하게 되는 부분이 레지스터이다. 레지스터는 CPU에서 요청을 처리하는데 필요한 데이터를 임시로 저장하는 기억장치이다. RAM과는 달리, 명령을 처리하기 위한 주소들과 명령의 종류를 저장하는 추가적인 기억장치가 레지스터인데, 바로바로 사용되어야 한다는 부분에서 레지스터는 RAM보다 읽어오는, 그리고 메모리를 쓰는 속도가 빠르다. 이는 레지스터 자체 능력도 있지만, CPU와 직접 연결이 되어있기 때문에 메모리보다 훨씬 빠른 속도를 낼 수 있다. 레지스터에는 여러 종류가 있는데, 우선 비트 단위에 따라 구분할 수 있다. RAX (64비트) EAX (32비트) AX (16비트) AH (8비트) AL 32비트 레지스터와 64비트 레지스터는 크기에 ..

Computer 2019.09.23

함수 프롤로그/에필로그

기본적으로 프로그램이 실행될 때 수많은 함수들이 호출이 되고 다시 리턴된다. 보통 함수 호출은 스택을 통해 이루어지는데, 과정을 대략적으로 설명하면 다음과 같다. 1. 함수가 사용할 파라미터를 스택에 넣고, 함수 시작 주소로 점프한다. 2. 함수 내에서 사용할 스택 프레임을 구성한다. 3. 함수 내부 내용 수행 4. 함수를 호출한 주소로 돌아가기 위해 스택을 복원시킨다. 이때 2번 내용을 프롤로그, 4번 내용을 에필로그라고 한다. 먼저 프롤로그를 살펴보자. ① RET ② SFP 위 그림에서, 메모리의 제일 아래를 나타내는 주소가 EBP이면서 ESP인데, 복귀 주소(RET)를 스택 맨 아래에 넣어두고, SFP는 RET 위에, 이 바로 아래에 EBP로 설정해두고, ESP값에 EBP 값을 넣는 과정이 프롤로그..

Computer 2019.09.19