Basic/OS(5)
-
[OS] 경쟁상태, 교착상태, 라이브락 (Race Condition, Deadlock, Livelock)
경쟁상태 (Race Condition)둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과를 가져오는 경우를 말합니다.- 파일 또는 변수와 같은 공유 자원을 접근하는 하나 또는 그 이상의 프로세스들의 다중 접근이 제대로 제어되지 않은 것을 말합니다.- 프로세스들 끼리 하나의 자원을 갖기 위해 싸우는 것, 하나의 자원을 동시에 요청 라이브락 (Livelock)한 프로세스가 이미 자원을 점유한 상태에서 다른 프로세스가 그 자원을 사용하기 위해 무한정 대기상태에 빠지는 것을 라이브락이라 합니다.- 지극히 정상적인 동작이지만 분명 문제가 있는 동작입니다. 교착상태 (DeadLock)프로세스들이 더 이상 진행을 못하고 영구적으로 블록되어 있는 상태로, 시스템 자원에 대한 경쟁 도중에 발생할 수도 있고 프로..
2016.11.09 -
[OS] 세마포어와 뮤텍스
운영체제와 프로그래밍 언어 수준에서 병행성을 제공하는 기법으로, 세마포어와 뮤텍스가 있습니다.- 동기화 기법이라고 볼 수 있습니다.- 세마포어와 뮤텍스 이외에도 모니터, 이벤트 플래그, 메시지, 스핀락 등이 있지만 나중에 포스팅 할 수 있도록 하겠습니다. 동기화시스템의 자원은 한정적인데 이 한정적인 자원에 여러 스레드가 동시에 접근해서 사용하려하면 문제가 발생할 수도 있습니다. 이런 문제를 방지하기 위해 스레드들에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정해주는 기법입니다. 임계구역 (Critical Section)공유자원에 접근하는 프로세스 내부의 코드 영역으로 어떤 한 프로세스가 이 영역을 수행중일 때 다른 프로세스가 같은 영역을 수행한다면 문제가 발생할 수 있습니다. 상호배제 (Mutua..
2016.11.09 -
[OS] 프로세스와 스레드
프로세스프로세스는 수 많은 요소들로 구성된 개체로 생각될 수 있습니다. 프로세스의 두 필수적인 요소는 프로그램 코드, 코드와 연계된 데이터의 집합입니다. 처리기가 프로그램 코드를 수행한다고 가정하면, 그 수행중인 개체가 프로세스입니다.- 수행 중인 프로그램- 컴퓨터 상에 수행 중인 프로그램의 인스턴스- 처리기에 할당되어 수행될 수 있는 개체- 명령들의 순차 수행, 현재 상태, 연계된 시스템 자원들의 집합 등에 의해 특징지어지는 활동 단위- 프로세스는 여러개의 스레드를 가질 수 있습니다. (다중 프로세스라고 가정할 때)- 자원 소유권 : 자신의 이미지를 위한 가상 주소 공간을 포함합니다. + 프로세스 이미지 : 프로세스 제어 블록에 정의되어 있는 프로그램, 데이터, 스택 등의 집합 + 주기억장치, 입출력 ..
2016.11.09 -
[OS] 프로세스 스케줄링
CPU 스케줄링요즘과 같은 다중프로그래밍 환경에서 가장 중요한 부분은 스케줄링이라고 할 수 있습니다.- "응답시간과 처리량, 효율성을 증대시키기 위해 CPU가 다음에 실행할 프로세스를 선택하는 것"이라고 할 수 있습니다. 선점과 비선점선택함수라고도 하는데 다음번 실행을 위해 준비 큐에서 대기중인 프로세스 하나를 고를 때 사용하는 알고리즘을 이야기합니다. 비선점 모드- 프로세스가 일단 실행 상태에 진입하면 종료되거나 자발적으로 CPU를 놓을 때 까지는 CPU를 빼앗기지 않습니다.- 자발적으로 CPU를 놓는다는 것은 프로세스가 종료되거나 입출력 요구 및 시스템 서비스 호출 등으로 인해 스스로 블록되는 현상을 말합니다.- 모든 프로세스에게 공정하고 응답시간의 예측이 가능합니다.- 짧은 프로세스가 작업시간이 긴..
2016.11.09 -
뮤텍스(Mutex) vs 세마포어(Semaphore)
동기화 리눅스 커널은 동기화와 독점적인 접근을 허용하기 위해 다양한 방법을 사용하고 있다. 여러 프로세스가 동일한 자원을 조작할 경우에 세마포어를 이용하는 것이 편리하다. 멀티 프로세서 환경에서 여러 CPU가 동시에 참조하는 테이블을 보호하기 위해서는 스핀락(spin lock)을 이용하는 것이 가장 일반적이다. 뮤텍스(Mutex)란? MUTual EXclusion 으로 상호배제라고도 한다. Critical Section을 가진 스레드들의 Runnig Time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술이다. 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 locking과 unlocking을 사용한다. 즉, 쉽게 말하면 뮤텍스 객체를 두 스레드가 동시에 사용할 수 없다는 의미이다. 세마..
2014.11.07