시스템 프로그래밍
-
Dynamic Memory Allocation : Advanced Concepts시스템 프로그래밍 2022. 6. 19. 15:21
Expilcit Free Lists implicit free list와는 달리 explicit free list는 오직 free된 block만 탐색하게 됩니다. 이러한 free block을 탐색할 수 있도록 이중 linked list로 구성되는데, 이를 통해서 앞으로만 탐색하는 것이 아니라 뒤로도 탐색하는 것이 가능해집니다. 해당 block에 전의 free block의 주소로 갈 수 있는(주소값을 담고 있는) prev와 뒤의 free block의 주소로 갈 수 있는(주소값을 담고 있는) next를 넣게 됩니다. 이를 통해 allocate된 block은 탐색하지 않아 탐색하는 시간은 빨라지지만 free block에서는 prev와 next를 위한 공간이 추가적으로 요구되므로 메모리 활용도는 낮아집니다.
-
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는 자동적으로 해주..
-
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인..
-
Synchronization : Basics시스템 프로그래밍 2022. 4. 20. 11:45
Threads Memory Model Conceptual model 여러 thread들은 하나의 process내에서 작동합니다. 각 thread들은 각자의 thread context를 가집니다. 예를 들어 thread ID, stack, stack pointer, PC, condition code, and GP register 가 있습니다. 모든 thread들은 이외에 나머지 것들을 공유합니다. 예를들어 Code, data(전역변수), heap, 라이브러리가 있습니다. Operational model 어떠한 thread들도 다른 thread의 stack 영역의 data를 write, read할 수 있습니다. concetual model과 operational model의 mismatch때문에 문제점이 발..
-
Concurrent Programming시스템 프로그래밍 2022. 4. 16. 18:42
Concurrent Programming is Hard ! concurrent 프로그래밍은 어렵습니다. 보통 우리는 sequential한 사고방식을 가지고 있어 time(시간)이라는 개념이 다르게 느껴집니다. 또한 동시에 프로그램이 진행되기 때문에 어떤 프로그램이 어떤 event가 발생했는지 예상할 수가 없어 비동기 방식으로 처리 해야합니다. 디버깅도 쉽지않습니다. 이러한 concurrent의 문제점이 존재합니다. Race (경쟁) OS가 process를 여러개 띄어놓고 time sharing을 하기 때문에 스케줄링(os 역할) 결과값 다를 수 있음 내가 결정할 수 있는 사안이 아닙니다. 따라서 스케줄링의 순서에 따라 내가 생각한 결과와 다르게 나올 수 있습니다. Deadlock (교착상태) 우리가 교통..
-
Network Programming : Part 2시스템 프로그래밍 2022. 4. 14. 14:19
Socket Interface : socket socket 함수에 관한 설명입니다. client와 server는 socket함수를 통해 socket descriptor을 만듭니다. Sockets Interface : bind server는 bind 함수를 통해 server socket은 secket descriptor을 가지고 bind하겠다는 것을 kernel에게 알려줍니다. sever 쪽 process는 sockfd를 통해 데이터를 읽을 수 있고 connection에 도착하는 모든 byte를 읽을 수 있습니다. 마찬가지로 sockfd를 통해 쓰기를 할 수 있습니다. connection의 끝점인 addr를 이용해 데이터를 전송하게 됩니다. Sockets Interface : listen kernel이 ..
-
Network Programming : Part 1시스템 프로그래밍 2022. 4. 12. 13:58
A Client-Server Transaction 위의 이러한 네트워크 client-sever 관계의 sequence를 client-sever transaction이라고 합니다. Hardware Organization of a Network Host Computer Networks network는 계층 시스템으로 이루어져 있습니다. SAN(System Area Network) : 방 하나정도 LAN(Local Area Network) : 빌딩 전체나 캠퍼스 전체 WAN(Wide Area Network) : 나라 와 나라 사이의 네트워크 이러한 네트워크 시스템을 internet이라고 합니다. 우리가 일반적으로 알고 있는 Internet은 internet의 유명한 예시입니다. Lowest Level : Et..