Computer Science
[CSAPP] 9.4 VM as a Tool for Memory Management(메모리 관리 툴로서의 VM)
9.4 VM as a Tool for Memory Management(메모리 관리 툴로서의 VM) 지난 섹션에서 가상 메모리가 DRAM 캐시로 사용되어 가상 주소 공간(Virtual Address Space)에서 페이지를 캐시하는 메커니즘을 제공하는 방법에 대해 알아봤다. 가상 메모리: 디스크에 저장되는 N개의 연속적인 바이트들로 이뤄진 배열 캐시 메모리와 DRAM의 관계에서 블록(Block)이라는 단위를 사용하듯이, 메인 메모리와 디스크의 관계에서는 페이지(Page)라는 단위를 사용 가상 메모리 기술을 사용하는 이유는 크게 세 가지가 있다. 1. Caching 2. Memory Management 3. Memory Protection 지난 섹션까지 단일 가상 주소 공간을 물리적 주소 공간에 매핑하는 단..
[CSAPP] 8.7 Tools for Manipulating Process
8.7 Tools for Manipulating Process Linux 시스템은 프로세스를 모니터링하고 조작하기 위한 여러가지 유용한 tool들을 제공한다. strace 실행중인 프로그램과 그 자식이 호출한 각 system call을 추적해서 출력해준다. 프로그램 컴파일할 때 -static하면 쉽게 볼 수 있다. ps 현재 시스템에서 프로세스 (죽은 것 포함)의 리스트를 보여준다. top 현재 프로세스의 리소스 사용량을 출력한다. pmap 프로세스의 memory map을 표시한다. /proc user program에서 읽을 수 있게 많은 kernel data structures의 내용을 ASCII text로 해서 내보내주는 virtual file system이다. 예를 들어 cat /proc/loada..
[CSAPP] 8.6 Nonlocal Jumps(논로컬 점프)
8.6 Nonlocal Jumps C언어는 nonlocal jump라고 불리는 user level exceptional control flow를 제공한다. 이 nonlocal jump는 일반적인 call and return sequence를 거치지 않고 한 함수에서 다른 실행중인 함수로 직접 control을 옮겨주는 것이다. nonlocal jump는 setjmp, longjmp 함수에 의해 제공된다. setjmp 함수는 현재 호출했을 때의 상태를 env 버퍼에 저장하고 0을 반환한다. 이 상태는 나중에 longjmp 함수에 의해 사용된다. 호출했을 때의 상태는 PC, stack pointer, general-purpose 레지스터를 말한다. setjmp가 반환하는 값은 변수에 저장하면 안된다. 하지만 ..
[CSAPP] 8.1 Exceptions(예외)
개요 control flow processor는 전원이 공급되고 끊기는 순간까지 Program Counter는 다음의 순서값을 가정한다. 즉, Instruction이 I_k에서 I_k+1로의 일련의 순서를 갖는 명령어를 기대한다고 할 수 있다. 이 때 control transfer이란, a_k에서 a_k+1로 이동하는 것을 말한다. 이러한 transfer의 연속적인 것을 control flow 라고 한다. Control flow의 종류 Smooth : I_k와 I_k+1이 메모리 상에 인접해 있는 것을 말한다. 이 smooth sequence에서도 I_k와 I_k+1이 인접하지 않은 경우가 생기는데, 이는 call, jumps , return 과 같은 명령어에 의해 발생된다. 이는 프로그램 내부 prog..
[CSAPP] 8.4 Process Control(프로세스 컨트롤)
학습 주제 // 간략하게 정리한 주제를 작성 정리한 내용 8.4.1 Obtaining Process IDs (프로세스 ID 가져오기) 각각의 프로세스는 고유의 0이 아닌 양수의 프로세스 ID (PID)를 가진다. getpid()는 호출하는 함수의 PID를 리턴한다. #include #include pid_t getpid(void); pid_t getppid(void); getpid()와 getppid() 루틴은 pid_t타입의 정수 값을 리턴한다. 8.4.2 Creating and Terminating Processes (프로세스의 생성과 종료) 프로세스는 세 가지 상태 중 하나로 정의된다. 실행중Running. : 프로세스는 CPU에서 실행되고 있거나 실행을 기다리고 있으며, 커널에 의해서 스케쥴을 보..