현대 시스템은 가상 메모리(Virtual memory) VM이라고 알려진 메인 메모리의 추상화를 제공한다. 1. 가상 메모리를 왜 공부해야 하는가 가상 메모리는 중요하다. 가상 메모리는 강력하다. 가상 메모리는 위험하다. 2. 물리 주소(Physical Address), 가상 주소(Virtual Address) 컴퓨터 시스템의 메인 메모리는 M개의 연속적인 바이트 크기 셀의 배열로 구성되며, 각 바이트는 고유의 물리 주소 PA를 가진다는 사실을 먼저 숙지하자. CPU가 메모리에 접근하기 위한 방식이 두 가지 있다. 빠른 이해를 위해 책에 있는 그림을 따라 그렸다.

Continue reading

1. 비지역성 점프(Nonlocal jumps) C는 setjmp와 longjmp 함수를 제공한다. #include <setjmp.h> int setjmp(jmp_buf env); int sigsetjmp(sigjmp_buf env, int savesigs); // Returns: 0 from setjmp, nonzero from longjmps setjmp 함수는 현재 '호출하는 환경'을 env 버퍼에 저장하며 0을 리턴한다. '호출하는 환경'은 프로그램 카운터, 스택 포인터, 범용 레지스터 등을 포함한다. setjmp가 리턴하는 값은 switch문이나 if문의 조건으로 사용될 수 있다. 그리고 리턴값이 변수에 할당되면 안된다. #include <setjmp.h> void longjmp(jmp_buf env, int retval); void siglongjmp(sigjmp_buf env, int savesigs); // Never returns longjmp 함수는 호출하는 환경을 env 버퍼에서 복원하고, 가장 최근의 setjmp 호출에서 리턴한다.

Continue reading

이 글에서는 동시성을 다룬다. 1. 시그널 블록, 블록 해제 묵시적 블록 방법 커널은 핸들러에 의해 처리되고 있는 모든 대기 시그널의 처리를 막는다. 명시적 블록 방법 sigprocmask와 같은 함수를 사용해 명시적으로 블록하거나 블록 해제할 수 있다. #include <signal.h> int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signum); int sigdelset(sigset_t *set, int signum); // Returns: 0 if OK, -1 on error int sigismember(const sigset_t *set, int signum); // Returns: 1 if member, 0 if not, -1 on error sigprocmask 함수는 현재 블록된 시그널의 집합(blocked 비트 벡터)을 변경한다.

Continue reading

Signal! 시그널은 작은 메시지 형태로, 프로세스에게 시스탬 내에 어떤 종류의 이벤트가 일어났다는 것을 알려준다. 먼저 man 7 signal을 통해 시그널에 어떤 종류가 있는지 알아보자. POSIX.1-1990 표준에 있는 시그널 (리눅스 x86 기준) Signal Value Action Comment SIGHUP 1 Terminate Terminal line hangup SIGINT 2 Terminate Interrupt from keyboard SIGQUIT 3 Terminate and dump core (책은 Terminate) Quit from keyboard SIGILL 4 Terminate and dump core (책은 Terminate) Illegal instruction SIGABRT 6 Terminate and dump core Abort signal from abort function SIGFPE 8 Terminate and dump core Floating point exception SIGKILL 9 Terminate Kill signal SIGSEGV 11 Terminate and dump core Invalid memory reference SIGPIPE 13 Terminate Broken pipe: write to pipe with no readers SIGALRM 14 Terminate Timer signal from alarm function SIGTERM 15 Terminate Termination signal SIGUSR1 10 Terminate User-defined signal 1 SIGUSR2 12 Terminate User-defined signal 2 SIGCHLD 17 Ignore Child stopped or terminated SIGCONT 18 Continue if currently stopped (책은 Ignore) Continue if stopped SIGSTOP 19 Stop Stop process SIGTSTP 20 Stop Stop typed at terminal SIGTTIN 21 Stop Terminal input for background process SIGTTOU 22 Stop Terminal output for background process SIGKILL과 SIGSTOP은 획득하거나(caught) 블럭되거나(blocked) 무시될(ignored) 수 없다.

Continue reading

이번 글에선 머리 굴려서 정리할 게 없다. 예제 코드에서 include한 csapp.h는 http://csapp.cs.cmu.edu/3e/ics3/code/include/csapp.h 를 사용했다. 책이나 인강 보셈! 1. 프로세스 ID 가져오기 #include <sys/types.h> #include <unistd.h> pid_t getpid(void); pid_t getppid(void); // Returns: PID of either the caller or the parent 각 프로세스는 0이 아닌 고유의 양수 프로세스 ID를 가진다. getpid 함수는 호출하는 프로세스의 ID를 반환하며, getppid 함수는 부모 프로세스의 ID를 반환한다. 2. 프로세스 생성과 종료 프로세스는 다음 세 가지 상태 중 하나로 생각할 수 있다.

Continue reading

이 글은 프로세스에 대해 정리한 글이다. 먼저 프로세스에 대한 정보 두 가지를 언급한다. 첫번째 프로세스(process)는 프로그램(program)의 인스턴스(instance)이다. 프로그램은 프로세스의 문맥(context)에서 돌아간다. 두번째 프로세스는 프로그램에게 여러 추상화를 제공한다. 프로그램에게 혼자서 프로세서를 사용한다는 착각을 주는 독립적 논리 제어흐름(logical control flow). 프로그램에게 혼자서 메모리를 사용한다는 착각을 주는 사적 주소공간(private address space). 좀 더 자세히 알아보자. 1. 논리적인 제어흐름 (Logical Control Flow) 프로세스는 각 프로그램에 프로세서를 혼자 사용한다는 착각을 제공한다. 실행된 프로그램의 인스트럭션에 프로그램 카운터 pc 값이 대응되는데, 이러한 pc 값의 배열을 논리 흐름(logical control flow)라고 부른다.

Continue reading

1. 예외적인 제어흐름 (Exceptional Control Flow) 프로그램 카운터(program counter)는 아래와 같이 연속된 값들을 가정한다. \[ a_0, a_1, ..., a_{n-1} \] 인스트럭션 $I_k$에 대응되는 주소가 $a_k$다. $ak$에서 $a{k+1}$로의 전환을 '제어이동'이라고 하며, 이러한 제어이동의 배열은 제어흐름(control flow)이라고 부른다. 보통의 제어흐름에서 $Ik, I{k+1}$는 메모리상에서 나란히 존재한다. jmp, call, ret 같은 인스트럭션에 의해 $Ik$가 $I{k+1}$와 인접하지 않는 경우가 있을 수 있다. 이러한 인스트럭션은 프로그램의 상태 변화를 표현하기 위해 당연히 필요하다. 시스템은 프로그램에서 표현되지 않은 시스템 상태의 변화에도 반응할 수 있어야 한다.

Continue reading

Author's picture

koyo

컴퓨터할줄모름

Student

Korea