분류 전체보기
-
Chapter 4 : Processor컴퓨터 아키텍쳐 2022. 6. 10. 20:23
Instruction Execution 프로그램에 메모리가 load되면 instruction들은 instruction memory 에 순서대로 주소를 가지며 위치합니다. PC 는 현재 실행하는 명령어의 메모리 주소를 가집니다. (정확히는 다음 명령어) PC에 담긴 주소로 instruction memory에서 instruction을 읽어오는 것을 fetch instruction이라고 합니다. instruction에서 레지스터 번호($at, $t0, $s0,...)를 통해 레지스터에 접근하여 값을 읽어오는것을 read register라고 합니다. instruction의 class에 따라 계산에 ALU를 사용하기도 합니다. 또한 메모리에 접근하여 데이터를 load /store할 수 있고 PC ← target ..
-
Dynamic Memory Allocation : Basic Concepts시스템 프로그래밍 2022. 5. 31. 15:30
Dynamic Memory Allocation 프로그래머들은 dynamic memory allocator을 사용해 run time 동안 사용될 가상메모리를 얻을 수 있습니다. dynamic memory allocator은 heap이라고 불리는 가상메모리를 관리합니다. allocator는 vairable한 size인 block을 allocated 또는 free한 상태로 heap을 관리합니다. allocator는 두가지 type이 존재합니다. Explicit allocator malloc이나 free를 통해 개발자가 직접 heap 메모리를 관리해 줍니다. c언어가 대표적입니다. Implicit allocator malloc 같은 메모리 할당은 하지만 free는 자동적으로 해줍니다. free는 자동적으로 해주..
-
Data Storage Structures데이터 베이스 시스템 2022. 5. 29. 20:50
File Organization 데이터 베이스는 file형태로 저장됩니다. 각 file은 record의 일련입니다. record는 field의 일련입니다. simple approach record 사이즈가 고정된다고 가정합니다. (ex 53 byte) 각 file은 하나의 특별한 type을 가지는 record를 가집니다. 서로 다른 relation에는 서로 다른 file이 사용됩니다. 이러한 case는 간단한 구조입니다. 우리는 나중에 variable한 record 형태를 배우게 될 것입니다. 우리는 disk block(ex 512 byte)보다 작은 record를 가정해봅니다. 각 문자는 1 byte를 차지합니다. 그리고 numeric(8, 2)는 8 byte를 차지합니다. 우리는 각 attribute..
-
Thread-Level Parallelism시스템 프로그래밍 2022. 5. 26. 14:58
지금까지 우리는 I/O delay를 줄이기 위해 thread를 사용해 왔습니다. 대부분의 하드웨어는 multicore로 되어있습니다. 그리고 여러개의 process로 구성됩니다. 또한 Hyperthreading이 가능한 CPU가 존재합니다. 즉, CPU가 여러개의 core를 가진것 처럼 보입니다. 예를 들면 core가 4개면 thread가 8개인것 처럼 작동하게 됩니다. 하지만 thread들 끼리 공유하는 data가 있다보니 완전히 병렬적으로 실행하기 어려운 부분이 있습니다. 위의 그림과 같이 단일 칩 안에 여러개의 core가 존재합니다. L1, L2 캐시는 private한 공간으로 해당 core안에서 공유되고 L3 캐시는 shared한 공간으로 여러 core가 접근가능합니다. register에 가까울 ..
-
Synchronization : Advanced시스템 프로그래밍 2022. 5. 13. 01:48
Producer-Consumer Problem producer와 consumer는 생성자와 소비자의 문제라고 보면 됩니다. shared buffer는 array로 된 버퍼로 하나씩 채워갑니다. producer 입장에서는 계속 해서 item을 채우다가 buffer가 꽉 차면 중단합니다. consumer는 buffer가 empty 상태가 아니면 계속 해서 소비합니다. 이러한 두 thread는 concurrent 하게 돌아가며 producer는 무언가를 생성하고 concumer에게 알려줍니다. consumer은 item을 기다리다가 item이 있으면 buffer로 부터 item을 빼고 producer에게 알려줍니다. 한개의 mutex와 2개의 counting semaphore가 필요합니다. mutex : 1인..
-
Normalization데이터 베이스 시스템 2022. 5. 2. 17:13
Features of Good Relational Design instructor 와 department를 in_dep 라는 table로 합쳤다고 가정하면 같은 dept_name 정보가 반복해서 들어가고 중복이 발생합니다. 또는 새로운 학과가 만들어질 경우 교수가 아직 없다면 null 값으로 넣어 추가해야하는 문제도 발생합니다. 따라서 무조건 table을 합친다고 좋은것이 아닙니다. Decomposition (table 쪼개기) 위에서 본 문제를 해결하려면 in_dep relation을 두개로 쪼개야 합니다. (instructor과 department) 하지만 모든 decomposition이 좋은것은 아닙니다. employee(ID, name, street, city, salary)를 employee1(..
-
Chapter 8 : Machine-Level Programming 4 (Data)컴퓨터 시스템 개론 2022. 4. 25. 16:45
Array Allocation T A[L] 이라고 하면 T는 데이터 type이고 L은 배열의 길이입니다. 메모리에 L * sizeof(T) byte를 연속적으로 할당함으로써 구현됩니다. 배열의 index의 접근은 배열의 첫번째 요소를 가리키는 포인터인 A의 특정 index 값을 더한 주소에 접근하는 방식으로 구현됩니다. A는 배열의 첫번째 요소를 가리키는 자료형이 T*인 포인터입니다. Array Access EX) Allocate (할당) 다음 예시는 배열들이 연속적인 20 byte 씩 할당 받았습니다. Access (접근) z[digit]의 값을 얻는 함수입니다. 레지스터 %rdi에는 배열의 시작 주소가 들어갑니다. 레지스터 %rsi에는 배열의 index가 들어갑니다. 우리가 원하는 주소값은 %rdi ..
-
Chapter 7 : Machine-Level Programming 3 (Procedure)컴퓨터 시스템 개론 2022. 4. 25. 12:31
Mechanisms in Procedures 프로시저 P가 프로시저 Q를 호출하고, Q가 실행되고 P로 다시 return됩니다. 1. Passing control PC는 Q의 코드의 시작 주소로 설정되고, Q를 호출한 후에 P의 명령어로 설정합니다. 2. Passing Data P는 하나 이상의 인자를 Q에게 제공하고, Q는 P에게 값을 다시 return합니다. 3. Memory management Q는 지역변수에 대한 공간을 할당할 필요가 있습니다. x86-64 Stack x86-64에서는 %rsp 레지스터가 현재 stack의 가장 낮은 주소 (Top의 주소)를 저장합니다. stack의 데이터가 쌓일 때는 낮은 주소 방향으로 쌓이도록 되어있습니다. 따라서 데이터를 Push할 때 %rsp의 값을 8만큼 ..