Computer Science/Operating System(20)
-
DeadLock, 교착상태
DeadLock, 교착 상태 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태로, 무한히 다음 자원을 기다리게 되는 상태를 말한다. 이는 시스템적으로 한정된 자원을 여러 군데에서 사용하려고 할 때 발생한다. 마치 외나무 다리의 양 끝에서 서로가 비켜주기를 기다리고 있는 것과 같다. Deadlock이 일어나는 경우 프로세스 1과 2가 자원 1, 2를 모두 얻어야 한다고 가정해보자. t1 : 프로세스1이 자원 1을 얻음, 프로세스 2가 자원 2를 얻음 t2 : 프로세스1은 자원 2를 기다림, 프로세스 2는 자원 1을 기다림 현재 서로 원하는 자원이 상대방에게 할당되어 있어서, 두 프로세스는 무한정 wait 상태에 빠진다. 이것이 바로 Deadlock! 주로 발생하는 경..
2024.04.17 -
Race Condition, Mutex와 Semaphore
Race Condition ❓ Race Condition, 경쟁 조건 Race condition이란 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는 지에 따라 그 실행 결과가 같지 않고 달라지는 상황을 말한다. 즉, 간단히 말하면 Race라는 의미 그대로 두 개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황을 말한다. 이처럼 공유 자원이 존재하는 경우에는 자원을 사용할 수 있는 프로세스를 제한하는 식의 상호 배제 기법을 활용할 수 있다. Mutual exclusion, 상호 배제 Race condition을 막기 위해서는 두 개 이상의 프로세스가 공용 데이터에 동시에 접근하는 것을 ..
2024.04.16 -
IPC, Inter-Process Communication
IPC, Inter-Process Communication 앞선 포스팅에서도 많이 살펴봤듯이, 프로세스는 독립적으로 실행된다. 프로세스와 흔히 비교되는 게 스레드인데, 스레드는 대부분의 메모리 공간을 공유하며 한 프로세스 내의 스레드끼리는 공유 자원을 가진다. 하지만 프로세스는 개별적으로 메모리 공간을 가지며 독립적으로 실행된다. 이러한 프로세스끼리도 통신할 수 있도록 한 기법이 바로 IPC이다. ❓ IPC, Inter-Process Communication IPC는 말 그대로 프로세스 사이의 통신 기법을 의미한다. 프로세스는 유저 공간에서 독립적으로 돌아가고 있기 때문에 서로에게 영향을 끼치지 않지만, 통신이 어렵다는 단점이 있다. 이러한 문제를 해결하기 위해 커널 영역에서 IPC라는 프로세스 간 통신..
2024.04.15 -
System Call : fork() & exec()
System Call : fork() & exec() System call로 하드웨어를 컨트롤하면서 여러가지 작업을 수행할 수 있다. System call을 활용한 작업 영역을 다음 세 가지로 구분한다. File I/O Process Control Inter Process Communication fork와 exec는 이 중 Process Control의 영역이다. 즉, fork()와 exec()는 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용되는 시스템 콜이다. 하지만 분명한 차이가 존재한다. 우선 각각의 동작과 예시에 대해서 알아보자. fork() fork() 시스템 콜은, 기존의 프로세스를 유지하면서 새로운 프로세스를 위한 메모리를 추가적으로 할당하고, 똑같은 코드를 복사하여 각각을 실행..
2024.04.15 -
멀티 프로세스와 멀티 스레드
멀티 프로세스와 멀티 스레드는 한 어플리케이션에 대한 처리 방식이다. 각각이 어떤 것이고, 장단점이 무엇인지 알아보자. 멀티 프로세스 ❓ 멀티 프로세스, Multi Process 하나의 프로그램을 여러 개의 프로세스로 구성하여, 각 프로세스가 독립적으로 작업을 수행하는 것을 말한다. 보통은 하나의 프로그램 실행에 대해 하나의 프로세스가 메모리에 생성되지만, 부가적인 기능을 위해 여러 개의 프로세스를 생성하는 것이다. 내부 구조 멀티 프로세스의 내부를 보면, 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함으로써 다중 프로세스를 구성하는 구조이다. 한 프로세스는 실행되는 도중 프로세스 생성 시스템 콜을 통해 새로운 프로세스들을 생성할 수 있는데, 다른 프로세스를 생성하는 프로세스를 부모 프로세스(P..
2024.04.15 -
JAVA의 Thread
JAVA의 Thread 자바에서는 여러 스레드를 생성하여 여러 작업들을 병렬적으로 수행할 수 있다. 오늘은 이에 대해 알아보자! Lang.Thread의 주요 메소드 우선 간단하게 스레드와 관련된 메서드를 먼저 보자. 각각은 스레드의 상태를 변화시키는 메서드이다. start() NEW에서 RUNNABLE로 보낸다. run() 스레드 상태가 RUNNING되면, run 메소드에 오버라이딩된 로직을 수행한다 yield() 우선권이 동일한 스레드에게 실행 기회를 양보한다. 해당 스레드는 RUNNING에서 RUNNABLE 상태로 바뀐다. sleep() 현재 실행중인 스레드를 주어진 시간동안 TIMED_WAITING 상태로 빠트린다. join() 다른 스레드와 협동 작업을 할 때 주로 쓴다. 호출되면 BLOCKED ..
2024.04.15