분류 전체보기(25)
-
시스템 프로그래밍 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 9. MSI Logic Circuits
9-0. MSI MSI란? medium-scale integration의 약어로, 중간 규모의 통합을 의미한다. 수백에서 수천 개의 전자 부품(트랜지스터, 저항기, 캐패시터 등)을 하나의 칩에 통합한 것을 의미한다. 이 범주는 소규모 통합(SSI)와 대규모 통합(LSI) 사이에 위치한다. 9-1. 디코더 디코더란? 디코더란 한 출력이 특정한 입력들의 조합에 의해서만 이루어질 때 사용한다. 카운터나 레지스터의 출력에 대해서 작동한다. 이진수를 나타내는 입력들을 받는다. 디코더는 특정한 입력의 조합에 대해 하나의 결과만이 active(HIGH)하며, 나머지는 LOW이다. 많은 디코더들은 active-LOW output을 만들게끔 설계되었다. 즉, 하나의 선택된 output만이 LOW, 나머지는 HIGH 상태..
2023.12.04 -
논리회로 chap 5. Flip-Flops and Related Devices
기말 시험 범위는 5-6부터!
2023.12.04 -
시스템 프로그래밍 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