본문 바로가기
SMALL

CS study/Operating System9

9. 운영체제 Semaphore Semaphore Variables semaphore variable은 lock과 condition variable의 역할을 동시에 할 수 있다. Semaphore Functions sem_init() 세마포어를 초기화 0이면, 쓰레드간 공유 0이 아니면, 프로세스간 공유 sem_wait() 변수를 감소시킴 감소된 변수가 음수가 되면, 호출한 쓰레드는 sleep 상태로 들어감 sem_post() 변수를 증가시킴 호출한 쓰레드는 즉시 리턴되고, sleeping 쓰레드는 깨움 Semaphore as Locks sem_init()과 sem_post()를 통해서 lock을 만들 수 있음 lock은 acquired와 released 두 가지 state를 가지므로 Semaphore as Locks는 binary s.. 2021. 9. 23.
8. 운영체제 Condition Variables Conditional Execution multi-thread 프로그램에서 쓰레드 실행 순서를 컨트롤하여 특정 조건에서 작동하도록 하고 싶은 경우가 있을 수 있다. shared variable(공유변수)을 사용해서 conditional execution을 강제할 수 있지만, 부모 쓰레드의 spin wait으로 인해 CPU낭비가 발생함 Condition Variable wait : 현재 state가 조건과 맞지 않으면 쓰레드가 자기 자신을 queue에 삽입 signal : 만약 다른 쓰레드가 state를 변경하면 대기중인 쓰레드 하나를 깨움 Condition Variable Functions pthread_cond_wait() 락을 해제하고 sleep 상태로 들어감 다시 일어날 때에는 가장 먼저 락을 획득.. 2021. 9. 22.
7. 운영체제 Lock Lock이란? 여러 코드 명령어를 lock으로 둘러서 그 영역을 하나의 atomic instruction으로 만드는 것 lock variable은 lock의 상태를 나타냄 → avaiable or acquired Mutex Lock lock()을 호출했을 때, 다른 쓰레드가 해당 lock을 사용하고 있지 않다면, 그 쓰레드는 lock을 획득하면서 critical section에 진입함 다른 쓰레드가 같은 lock variable로 lock()을 호출하면 소유중인 쓰레드가 그 lock을 놓기전에는 실행되지 않음 Mutex Unlock 쓰레드가 unlock()을 호출하면 해당 lock variable은 available 상태가 됨 이 때 대기중인 쓰레드가 있다면 그 중에 하나가 실행됨 Lock Impleme.. 2021. 9. 20.
6. 운영체제 Threads 이제부터는 가상화(virtualization)에 대한 이야기에서 병행성(concurrency)에 대한 이야기로 넘어올 것이다. Multi-Processing Multi-Threading - 여러 프로세스들이 프로세스에서 run (by 가상화) - 이전 상태는 PCB에 저장됨 - 여러 쓰레드들이 하나의 프로세스에서 run - address space를 공유하며, 스택만 달리 사용 - 이전 상태가 TCB에 저장됨 쓰레드의 생성 pthread_create() pthread 생성시 함수에 전달할 인자는 포인터 변수 단 하나만 취급하므로, 여러 변수를 전달하려면 별도의 struct를 생성해서 전달해야 함 쓰레드의 스케줄링에는 우선순위가 없다!! 쓰레드의 종료 pthread_join() : 메인 쓰레드가 자식 쓰레.. 2021. 9. 18.
5. 운영체제 paging →메모리 관리 접근법 두 가지 1) Segmentation - 이전 파트에서 공부함 - 다양한 크기의 segment로 나눔 - fragmentation, free list management 등의 문제점 2) Paging - 고정된 크기의 "page"로 virtual address를 나눔 - physical memory는 고정된 크기의 page frame 배열이 되고, 그것은 각각 virtual page에 연결됨 Page-Based Memory Mangement의 이점 Flexibility : 프로세스가 메모리를 어떻게 사용하든지 (스택이든 힙이든 상관없이) 유연함 Simplicity : 모든 페이지의 크기가 같으므로 free list를 관리하기도 쉽고 free page 찾아서 쓰기도 쉬움 Virtual.. 2021. 9. 17.
4. 운영체제 Virtual Memory 리뷰 Memory Address Space는 각 Process 마다 존재한다. Stack : 스택에 있는 메모리는 컴파일러가 자동으로 할당하고 해제 Heap : 코드, 즉 프로그래머에 의해서 할당되고(malloc) 해제(free) Memory Leak 할당된 메모리를 해제하지 않으면 메모리 사용이 증가하고, 가용 메모리 공간이 부족해진다. Garbage Collection : 프로세스가 종료되면, 프로세스가 할당되었던 memory page를 OS가 회수해간다. Common Memory Errors Segmentation Fault : 할당되지 않은 메모리 주소에 접근하는 경우 Buffer Overflow : 충분한 메모리 할당이 되지 않은 경우 and 메모리 영역 바깥에 할당하는 경우 Uninitiali.. 2021. 9. 15.
LIST