본문 바로가기

운영체제(OS)5

[OS] 동기화 메커니즘(Synchronization Mechanisms)과 스핀락(Spinlock), 뮤텍스(Mutex), 세마포어(Semaphore) 0. 경쟁 상태와 임계 구역0-1. 경쟁 상태 (Race Condition)경쟁 상태는 여러 개의 프로세스가 병행하여 공유 자원을 읽고 쓸 때 발생하는 상황공유 자원 접근 순서에 따라 실행 결과가 매번 달라지는 문제 (non-deterministic)이러한 경쟁 상태를 해결하기 위해 동기화 매커니즘이 필요하다.0-2. 임계 구역 (Critical Section)둘 이상의 프로세스/스레드가 동시에 실행될 경우 생길 수 있는 경쟁 조건을 발생시킬 수 있는 코드 영역임계 구역 해결 조건Mutual Exclusion (상호 배제) : 이미 한 프로세스가 임계 구역에서 실행중이라면 다른 프로세스의 접근을 금지하는 것Progress (진행) : 임계 구역에 프로세스가 없을 때, 임계 구역에 접근하고자 하는 프로세스.. 2024. 6. 28.
[OS] DeadLock(교착상태) 발생과 해결 방안 1. DeadLock (교착상태) 란?교착상태란 여러 프로세스나 스레드가 서로 자원을 기다리며 실행이 멈추는 상태를 말한다.예를 들어, 프로세스 A가 프로세스 B의 자원을 요청할 때 프로세스 B도 프로세스 A가 점유하고 있는 자원을 요청하는 것이다. 2. DeadLock 원인DeadLock(교착상태)은 아래의 네가지 조건을 모두 만족할 때 발생한다.상호배제(Mutual exclusion) : 자원은 한번에 하나의 프로세스만 사용할 수 있어야 한다.점유대기(Hold and wait) : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.비선점(No preemption) : 다른 프로세스에 할당된 자원은 사용이 끝날 때.. 2024. 6. 24.
[OS] Blocking / Non-Blocking, Sync / Async 1. Blocking / Non-BlockingBlocking와 Non-Blocking는 제어권의 위치(작업을 진행할 수 있는지 or 기다려야 하는지)로 구분 할 수 있다.1-1. BlockingBlocking 은 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것이다.즉, 호출된 함수가 자신의 로직을 모두 끝낼 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 상황을 의미한다.예시A :  B님 xxx 작업을 처리해줘요B : ㅇㅋ 금방 끝나는 일이니깐 어디가지 말고 옆에서 기다리고 있어욤A : 넵(B가 작업을 완료할때 까지 기다려야 한다.)1-2. Non-BlockingNon-Blocking은 다른 주체의 작업에 관련 없이 .. 2024. 6. 17.
[OS] Process / Thread Process와 Thread 모두 프로그램의 실행과 관련된 단어들이다. 프로세스와 스레드의 차이점을 결론부터 말하자면 Process는 실행의 단위, Thread는 Process 내에서 실행되는 흐름의 단위로 Process는 독립적으로 실행되지만 Thread는 Process 내의 Thread들 끼리는 Heap, Data 등(Stack은 개별 할당)을 공유한다. 그렇다면 프로세스와 스레드 모두 프로그램의 실행과 관련된 단어라면 프로그램과 프로세스의 차이점은 무엇일까? 간단하게 설명하면 프로그램은 아직 실행되지 않은 파일 그 자체로 쉽게 말해 코드 덩어리라고 보면 될 것 같다. 반대로 프로세스는 프로그램을 실행하였을 때 해당 파일이 컴퓨터 메모리에 올라가게 되고 동적인 상태의 프로그램이다. 간단하게 요약하자면.. 2023. 12. 29.
[OS] SystemStructure & Program Execution 1 CPU + Memory → Computer I/O device Input : I/O device에서 입력된 데이터가 컴퓨터로 보내지는 방향 Output → 컴퓨터에서 데이터를 처리 후 그 결과를 필요한 device로 내보내는 방향 1. CPU cpu는 pc가 가리키는 메모리주소에 있는 Instruction을 읽고 실행하는 것. 다음 Instruction을 읽기 전에 Interrupt line을 체크하여 Interrupt가 있다면 기존에 실행중인 작업 멈추고 cpu를 누가 쓰고 있었든 상관없이 cpu제어권이 운영체제에게 넘어가게 된다. 운영체제는 매 Interrupt 마다 Interrupt가 걸린 이유가 os 안의 커널 함수로 정의되어 있다. Interrupt Vector(인터럽트 번호와 주소의 쌍) / .. 2023. 10. 4.