ComputerScience/운영체제
-
[Unix] fork(), vfork(), Copy On Write, exec()ComputerScience/운영체제 2020. 6. 14. 18:26
유닉스에서 fork()와 exec()를 배웠다. 도대체 fork(), exec()는 무엇일까? 간단히 Process Control을 해준다고 보면 된다. fork() fork()는 현재 부모 프로세스를 메모리상에서 복사한 자식 프로세스를 만드는 과정. 이러한 과정에서 자식은 부모의 변수, 스택 ,힙의 내용을 복사하게 된다. 이 때, PCB또한 복사된다. PCB는 프로세스를 지원하고 관리하기 위한 정보들이 담긴 데이터 구조체이다. 부모와 자식의 주소공간은 다르다. 부모 프로세스는 원래대로 실행되고, fork()를 이용해 생성된 프로세스도 다음 라인부터 실행된다. fork()의 return값은 proceeid를 출력하게 되는데 fork()의 return 값이 0이면 자식 프로세스 0보다 크면 부모 프로세스 ..
-
[운영체제] Atomic연산, CAS(CompareAndSwap)에 대하여, ABA문제ComputerScience/운영체제 2020. 6. 14. 17:43
스핀락, 뮤텍스, 세마포어, 모니터 모두 하나의 Thread가 임계영역을 Lock한 후 작업을 수행하는 절차이다. 하지만 sychronized화 하게 되면 한 개의 Thread가 해당 블락을 전체 lock(점유)하기 때문에 다른 Thread는 아무작업을 하지 못하게 되고 이로 인해서 기다리는 상황이 발생하고 낭비가 심해진다. 그래서 Non-blocking한 방법, Lock-Free한 방법으로 동기화 문제를 해결하기 위한 방법이 바로 Atomic연산이다. 그리고 이 동작의 핵심 원리는 CAS(Compare And Swap)에 있다. CAS(CompareAndSwap)알고리즘이란? 멀티 쓰레드 환경, 멀티 코어 환경에서 각 CPU는 메인 메모리에서 변수값을 참조하는 것이 아닌, 각 CPU에서 캐시 영역에서 ..
-
[운영체제] 스핀락(Spinlock)은 무엇인가?ComputerScience/운영체제 2020. 6. 14. 00:42
2020/06/14 - [운영체제] - [운영체제] 뮤텍스(Mutex), 세마포어(Semaphore) 그리고 모니터(Monitor) 뮤텍스와 비교되는 스핀락 빙글빙글 돈다는 의미에서 스핀락이다. 스핀락 특정한 자료구조를 lock 또는 unlock 함으로써 공유 데이터에 대한 접근 권한을 관리하는 방법이다. 권한을 획득하기 전까지는 CPU는 무의미한 코드를 수행하는 busy waiting 상태로 대기하고 있다가 접근 권한을 얻는다면 내부 코드를 수행하고 종료 후 권한을 해제한다. 상태가 획득/해제 밖에 없기 때문에 공유 영역에는 하나의 컴퍼넌트만 접근할 수 있으며 획득과 해제의 주체는 동일해야 한다. 즉, Lock를 얻을 수 없다면 계속해서 for문을 돌면서 Lock을 얻을 수 있는 지 확인한다. Lock..
-
[운영체제] 뮤텍스(Mutex), 세마포어(Semaphore) 그리고 모니터(Monitor)ComputerScience/운영체제 2020. 6. 14. 00:10
이 셋은 모두 운영체제의 동기화 기법이다. 일단 뮤텍스와 세마포어부터 살펴보자. 운영체제에선 공유된 자원에 대해 여러 프로세스, 쓰레드가 접근하여 문제가 발생하는 것을 방지하고자 운영체제 동기화 기법을 만들었다. 1. 뮤텍스(Mutex, 상호배제) aka Mutual exclusion 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것이다. 임계영역(Critical Section)을 가진 스레드들의 Running time이 서로 겹치지 않게 단독적으로 실행되게 하는 것. 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 Locking과 Unlocking을 사용. 한 쓰레드가 임계영역에 들어가기 위해선 lock을 하고 나올 땐, unlock를 해준다. bool unlocked; void ..
-
[운영체제]데드락을 회피할 수 있는 자원할당 그래프, 은행원 알고리즘ComputerScience/운영체제 2020. 6. 13. 17:28
자원할당 그래프 알고리즘(Resource-Allocation Graph Algorithm) 자원이 하나일 때 사용하는 알고리즘. 자원 할당 그래프에 요청 간선과 할당 간선에 추가하여, 예약간선이라는 새로운 유형의 간선을 도입한다. - 요청선 : 프로세스에서 자원으로 연결 된 섬 (나 저 자원 쓰고 싶다~라고 요청한다고 보면 됨) - 할당선 : 자원에서 프로세스로 연결 된 섬 (이 자원은 이 프로세서가 쓰고 있음을 나타냄) 교착상태 확인 방법 1. 자원할당 그래프의 사이클이 존재하는 지 확인 2. 사이클이 존재한다면 - 자원 유형에 하나의 사례만 있으면 교착상태 - 자원 유형에 여러 사례가 있으면 교착상태 가능성 교착상태가 있는 자원할당 그래프 예시 사이클은 있지만 교착상태가 아닌 예 프로세스 p1이 작업..
-
[운영체제] 데드락(Dead lock), 교착상태가 뭐지? + 해결방법ComputerScience/운영체제 2020. 6. 13. 17:27
데드락(Dead lock)이란? '교착 상태'라고 하며 한정된 자원을 여러 곳에서 사용하려고 할 때 발생할 수 있다. (DB의 트랜잭션들이 하나의 Table에 대해 연산을 시도할 때도 발생할 수 있다) 데드락 발생 요건 네 가지 조건을 모두 충족할 때 발생한다. 1. 상호배제(Mutal exclusion) 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다. 2. 점유와 대기(Hold and Wait) 자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것. 3. 비선점(Non Preemptive) 다른 프로세스의 자원을 강제로 가져올 수 없음. 4. 환형대기(Circle wait) 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 갖고 있는 것 데드락 ..
-
[운영체제/OS] 스레드(Thread), 그리고 프로세스와의 차이ComputerScience/운영체제 2020. 6. 4. 10:02
쓰레드(Thread)란 무엇인가 스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다. 출처 : wikipedia.org 예전 글에서 알아 본 실행중인 프로그램을 뜻하는 프로세스에서의 내부에서 실행되는 흐름의 단위입니다. 하나의 프로세스에는 최소 하나 이상의 스레드가 존재합니다. 다수의 프로세스가 순차적으로 실행되는 멀티프로그래밍은 각자의 프로세스가 독립적이기 때문에 자신만의 Code, Data, Heap, Stack를 갖고 있습니다. 하지만 스레드는 하나의 프로세스 에서 ..
-
[운영체제/OS] 프로세스/문맥교환/스케줄링ComputerScience/운영체제 2020. 6. 3. 10:21
프로세스(Process)와 쓰레드(Thread)의 차이를 알아보자. 프로세스 (Process) Process : 프로세스라는 것은 하나의 작동하고 있는 프로그램, 프로세스의 상태로는 CPU의 수행상태, 프로세스 주소공간, 프로세스 관련 커널 자료구조가 있다. CPU의 수행상태 : CPU의 수행 상태를 나타내는 하드웨어 문맥으로 PC(Program Counter : 다음에 실행 될 Code의 위치)와 각종 레지스터가 존재한다. 프로세스 주소 공간 : 프로세스는 Code, Stack, Data값을 각각 갖고 있다. 커널상의 Context : 프로그램이 수행돼 프로세스가 되면 OS는 이를 관리하기 위한 자료구조를 유지한다. PCB(Process Control Block) : 프로세스 정보를 저장해놓은 블록을 ..