20. Page Tables
2020. 6. 20. 22:03
🚦 Server/Operating System
53 bit Address space 8 KB Page PTE는 8 byte 짜리 8 KB니까 뒤의 13 bit는 Offset 으로 사용한다. 8 KB = 13 bit 2^53 / 2^13 = 2^40 Linear Page Table을 만드려면 2^40 개의 PTE가 필요하다. 하나의 Page에 PTE가 몇 개까지 올 수 있냐에 따라서 비트가 쪼개진다. Page 하나의 크기 = 8 KB PTE 하나의 크기 = 8 byte Page 하나에 PTE가 몇개가 들어갈 수 있나? 8 KB / 8 byte = 1K 개 = 2^10개의 PTE = 10bit 2^40개의 PTE를 페이지로 나누려면 하나의 페이지에는 2^10개의 PTE를 가질 수 있으므로 2^40 / 2^10 = 2^30 개 아직 남음 계속 나눠주면 1..
19. Paging and Page Tables
2020. 6. 14. 17:17
🚦 Server/Operating System
★★★★★★★ Contiguous memory allocation Fixed partition : Internal fragmentation Variable partition : External fragmentation Segmentation : External fragmentation Paging Physical Address를 non-contiguous하게 쪼개는 것 고정된 사이즈로 잘리며, “Frame” 으로 불린다. Logical Address는 “Page” 로 쪼개진다. Page 사이즈가 클수록 Internal fragmentation이 날 가능성이 크다. Page Table OS 가 관리한다. MMU 가 Translate한다. Virtual address는 Page Table을 통해 Physic..
18. Address Spaces
2020. 6. 14. 11:37
🚦 Server/Operating System
★★★★★★★ Address Physical address / Logical address Absolute address / Relative address Physical Address 컴퓨터의 메인 메모리에 접근할 때 사용되는 주소 Logical Address 프로세스 관점에서 사용되는 주소 CPU에 의해 발생한다. Memory Management Unit (MMU) Logical Address 를 Physical Address로 translate 시킨다. 서로 다른 프로세스가 서로 같은 Logical Address를 쓸 수 있지만, MMU를 통해 서로 다른 Physical Address에 매핑되어있다. Fixed Partition : 고정되게 메모리 쪼개기 Physical Address = Base ..
17. Deadlock
2020. 6. 11. 21:26
🚦 Server/Operating System
Deadlock 2개 이상의 task들이 1개 이상의 resource를 요청하며, 서로 resource를 받기를 기다리고 있을 때 Deadlock이 발생한다. Deadlock 발생 조건 4가지 Mutual exclusion 두 개 이상의 task들이 서로 share 해서 쓸 수 없는 resource 여만 한다. (하나의 쓰레드가 어떤 자원을 사용하고 있다면, 다른 쓰레드는 요청을 하고 반납이 될 때까지 대기해야 함) Hold and wait 어떤 resource가 필요한데 acquire하는 도중에, 다른 resource가 필요하면 내가 가지고 있는 것은 든 상태로 기다린다. (쓰레드는 반드시 적어도 1개의 자원을 가지고 있어야 하며, 추가적인 자원을 얻기 위해서는 다른 쓰레드의 사용이 끝나길 대기해야 함..
16. Synchronization (3)
2020. 5. 26. 11:42
🚦 Server/Operating System
Producer Process(생산자 프로세스)는 정보를 생산하고, 그것을 Consumer Process에서는 소비하는 구조이다. 보통 생산자가 버퍼에 정보를 채워놓을 때, 버퍼의 크기가 무한대인 Unbounded Buffer를 이상적으로 생각한다. 버퍼의 크기가 한계가 없으니 생산자는 계속 정보를 넣을 수 있다. 하지만, 현실적으로 이런 것을 구현할 수 없으니 유한 버퍼 Bounded Buffer를 Circular array로 구현해서 Unbounded Buffer 흉내를 낸다. 이런 유한 버퍼에서는 1) 버퍼가 비어있으면 소비자는 waiting 해야하고 2) 버퍼가 꽉 차있으면 생산자는 waiting 해야 한다. Circular array로 구현하기 위해서 우리는 in과 out을 사용할 것이다. in..
15. Synchronization (2)
2020. 5. 26. 11:25
🚦 Server/Operating System
Mutex Lock (Mutual Exclusive Lock) Mutual Exclusive propoerty를 제공하는 Lock Spinlock 문고리를 계속 돌려보는 방법 장점 : context-switch가 일어나지 않는다. 단점 : 계속 돌려봄으로써 리소스를 계속 요구하므로 CPU 낭비가 심하다. block : aquire 한번만 해보고 점잖게 기다리는 것 Semaphore Shared data의 개수를 의미한다. S 변수 : 공유자원의 개수를 나타내는 변수 S값을 1로 주면 lock과 똑같다. Wait() : Shared data가 없으면 기다린다. Signal() : 나 다 썼으니 너 써! 라는 신호 Semaphore의 종류 Binary semaphore (= mutex) S값이 1인 경우 C..
14. Synchronization (1)
2020. 5. 18. 21:05
🚦 Server/Operating System
Quiz When threads can concurrently access and change shared variables, we say that part of code is a ( ) and it may lead to a ( ). To make the program run correctly, we need a mechanism to ( ) threads. A ( ) is one of such mechanisms. A correct implementation should provide ( ), ( ), and ( ) properties. Answer 더보기 critical section , race condition synchronized Lock, mutual exclusive, progressive..
Process VS Processor
2020. 5. 17. 11:02
🚦 Server/Operating System
프로세스와 프로세서의 차이 프로세서와 프로세스의 구별 프로세서와 프로세스는 엄연히 다른 존재입니다. Processor (프로세서)는 하드웨어적인 측면에서 "컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛"이다. 이는 중앙처리장치(Central Processing Unit)를 뜻하며 폰노이만 아키텍쳐에 의해 만들어졌다면 적어도 하나 이상의 ALU (Arithmetic Logic Unit)와 처리 레지스터(Register)를 내장하고 있어야 한다. 프로세서에 대한 정의입니다. 오래 전 혼자 공부했던 8008과 z80 같은 마이크로프로세서를 떠올리게 하는 정의입니다. 이런 정의를 충족하는 것에는 매우 여러종류의 프로세서들이 있습니다. 네트워크 장비(라우터, 스위치, IP공유기, 스위칭허브 등)에 포함되어 있는..
13. Process Scheduling (4)
2020. 5. 12. 16:05
🚦 Server/Operating System
Proportional Share Scheduling Real-time Systems Real-time CPU Scheduling Rate Monotonic Scheduling Earliest Deadline First Multiple-Processor Scheduling Processor Affinity Load Balancing Multicore Processors Algorithm Evaluation 큐마다 다른 비율로 각각의 프로세스를 나눠서 쓰는 것 time quantum을 주고 프로세스를 나눠줌 Lottery scheduling : 프로세스마다 티켓을 나눠준 개수에 비례해서 프로세스를 나눠줌 실행이 완료되어야할 dead line이 있는 프로세스 Real-time system은 task 처리에 ..
12. Process Scheduling (3)
2020. 5. 7. 21:23
🚦 Server/Operating System
지난 내용 Starvation : 모종의 이유로 인해 CPU를 할당하지 못하는 것 Preemtive Scheduling : 다른 프로세스를 처리하기 위해 CPU를 다른 프로세스에게 넘겨주는 것 FCFS (Fist-Come, First-Served) : 가장 먼저 온 프로세스부터 처리 SJF (Shortest Job First) : 가장 짧은 것부터 처리 SRTF (Shortest Remaining Time First) : SJF의 preemptive version Priority Scheduling 우선순위가 가장 높은 애들을 처리한다. Preemptive 가 될 수도 있고, Non-preemptive가 될 수도 있다. SJF : 프로세스의 실행시간이 가장 짧은 애부터 처리하는 것 여기에도 Priorit..
11. Process Scheduling (2)
2020. 5. 5. 21:05
🚦 Server/Operating System
Starvation : CPU가 바빠서 프로세스가 CPU를 할당받지 못하는 것 Preemptive Scheduling OS 가 현재 사용하고 있는 프로세스를 멈출 수 있다. Non-Preemptive Scheduling CPU를 사용하고 있는 프로세스가 자발적으로 CPU 사용을 해제함 멀티프로그래밍에서는 기본적으로 Preemptive Scheduling 사용 Batch System : 최대한 처리를 많이해야 하는 시스템, Throughput, CPU Utilization이 중요한 시스템 Interactive System : 성능이 아니라 Response time이 중요한 시스템 스케줄링 기준 높으면 좋은 것 CPU Utilization Throughput 낮으면 좋은 것 Turnaround time : ..
10. Process Scheduling (1)
2020. 4. 29. 16:27
🚦 Server/Operating System
Process Scheduling 프로세스 안에는 Code, Data, Heap, Stack이 있고, Excution state를 담당하는 PC counter, SP가 있다. 프로세스들는 서로 다른 Address space를 가지고 있고 하나의 컴퓨터에서 동시에 돌아갈 수 있다. 하나의 프로세서로 여러개의 프로세스를 돌리고 싶다면? Concurrent하게 해야한다. 이것을 Process Scheduling 이라고 한다. "어떻게 프로세스에게 CPU를 할당할 것인가?" Ready Queue에 있는 프로세스들 가운데 하나에게 CPU를 할당한다. Scheduler 를 통해 프로세스의 context를 바꿔가며 돌게한다. Process Scheduling 의 목적 적은 Processor로 많은 Process를 실..
pthread
2020. 4. 29. 12:05
🚦 Server/Operating System
PTHREAD POSIX Thread(약어 PThread)는 유닉스 계열 시스템에서 일반적으로 사용하는 스레드 관련 표준 API이다. int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); 스레드 생성을 위해서 사용한다. 첫번째 argument인 thread 는 스레드가 성공적으로 생성되었을때 생성된 스레드를 식별하기 위해서 사용되는 스레드 식별자이다. 두번째 argument인 attr 은 스레드 특성을 지정하기 위해서 사용하며, 기본 스레드 특성을 이용하고자 할 경우에 NULL 을 사용한다. 세번째 argument인 start_routine는 분기시켜서 실행할 스..
fork() 와 exec()
2020. 4. 28. 11:35
🚦 Server/Operating System
목차 fork() & exec() fork(), exec()의 차이점 exec() 관련 함수 System Call 에서의 fork, exec fork() 예시 exec() 예시 fork() & exec() fork()와 exec()는 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용하게 된다. exec에는 execl, execv등 여러가지 함수군을 가지고 있다. exec의 함수군에 대해서는 아래쪽에서 차이를 간단히 정리하고자 한다. fork(), exec()의 차이점 우선 fork()와 exec()의 차이점에 대해 설명하고자 한다. fork() 시스템 호출은 새로운 프로세스를 위한 메모리를 할당한다는 것이다. 그리고 fork()를 호출한 프로세스를 새로운 공간으로 전부 복사하게 되고, 원래 프로세..
09. Threads (3)
2020. 4. 27. 23:31
🚦 Server/Operating System
Implicit Threading : 쓰레드의 스케줄링을 사용자가 하는 것이 아니라 운영체제 또는 컴파일러에게 맞기는 것이다. Thread Pool 쓰레드를 만들고 제거되는 상황에서, 쓰레드를 만드는 시간이 동작하는 시간보다 오래걸릴 수 있다. 시스템의 동작을 보장하는 최대한의 쓰레드 수에 대한 제한이 필요하다. 쓰레드가 필요하면 Thread Pool 에서 가져오고, 다 쓰면 Thread Pool에 돌려놓는다. 쓰레드를 만들고 없에는 과정을 분리시킬 수 있다. Fork Join : 메인 쓰레드가 task를 수행할때 쓰레드를 fork로 쪼개서 수행하고, task가 끝나면 join으로 재결합해서 가져온다. OpenMP : 공유메모리를 이용한 멀티쓰레딩 프로그램 만들 때 쓰이는 프로그램 Issue in Thr..