컴퓨터공학 전공공부/시스템 프로그래밍(4)
-
시스템 프로그래밍 chap 8. Process and Virtual Memory
1. Processes process process란 쉽게 말하면, 실행되고 있는 프로그램을 말한다. 정확하게는 실행되고 있는 프로그램의 상태이다. 프로그램, 프로세서(프로세스를 실행시키는 하드웨어)와 다른 말임에 유의하자. 프로그램은 하나여도 프로세스는 여러 개일 수 있다. 예를 들어, 크롬 창을 여러 개 띄워두는 것은 하나의 프로그램(크롬)에 여러 프로세스(각각의 창)가 존재하는 것이다. 프로세스와 두 가지 추상화 프로세스는 각 프로그램에 두 가지 주요 추상화를 제공한다. 이는 다음과 같다. logical control flow (실행 흐름) 하나의 CPU가 여러 개의 프로그램을 순회하며 동작하는데, 프로그램 입장에선 자신이 CPU를 독점적으로 사용하는 것처럼 보인다. 이는 context switch..
2023.12.07 -
시스템 프로그래밍 chap 7. Linking
1. Linking 1-1. 링킹 기본 개념과 링커 linking에 들어가기 전에 linking의 발생 : 라이브러리의 특정 함수를 호출하게 되면 linking이 발생한다. compilation system의 분류 : compilation system은 크게 assembly phase와 linking phase로 구분된다. assembly phase에서는 C 코드를 object code로 만들고, linking phase에서는 앞에서 만든 object code와 필요한 다른 object file, 라이브러리를 결합해 단일 실행 가능한 프로그램으로 만든다. linker를 이해함으로써 얻는 것 : 큰 프로그램의 설계 가능 다른 중요한 시스템 컨셉 이해 공유 라이브러리 이용 가능 언어 범위 지정 규칙이 구현되..
2023.12.07 -
시스템 프로그래밍 chap 6. Machine-Level 프로그래밍 : 데이터
1. Arrays (배열) 1-1. 배열의 정의 배열 할당 T A[L]의 꼴로 할당한다. (예를 들면, int A[10];) 이 경우 T라는 데이터 타입의, 길이 L인 배열을 할당한 것이다. 결국, T A[L]은 메모리 내에서 L * sizeof(T) 바이트의 연속적으로 할당된 영역이다. 배열 접근 int val[5]; 에 접근한다고 가정하자. val은 다음과 같은 메모리 공간을 가질 것이다. 이를 바탕으로 val에 다양하게 접근할 수 있다. Reference Type Value val [4] //4번째 칸의 값에 접근 int 3 val //시작점 (포인터)에 접근 int * x val + i //자료형의 크기 * i만큼 주소 증가해 주소에 접근 int * x + 4i &val [2] //val[2]의 ..
2023.12.07 -
시스템 프로그래밍 chap 5. Machine-Level 프로그래밍 과정
0. 기존 내용 복습. Stack & 호출 관습 : 제어 전송 1. 호출 관습 : 데이터 전송 데이터 흐름의 절차 데이터 저장소는 레지스터와 스택으로 구성된다. 처음 6개의 인자는 레지스터로 구성되며, 7번째 인자부터는 스택으로 구성된다. 스택 공간은 필요할 때 할당된다. 레지스터 : %rdi, %rsi, %rdx, %rcx, %r8, %r9 + return value %rax 스택 : 데이터 흐름의 예시 //C code void multstore (long x, long y, long *dest) { long t = mult2(x,y); *dest = t; } long mult2 (long a, long b) { long s = a*b; return s; } //assembly 0000000000400..
2023.12.04