Mutex 와 Semaphore 는 모두 병행성 프로그래밍에서 상호배제를 달성하는 도구

  1. Mutex (뮤텍스):
    • 한 번에 하나의 스레드만이 자원에 접근할 수 있도록 하는 동기화 메커니즘입니다.
    • 이는 보통 크리티컬 섹션을 보호하거나 공유 자원에 대한 접근을 제어할 때 사용됩니다.
    • Mutex는 잠금을 획득한 스레드만이 해당 자원을 사용할 수 있도록 합니다
  2. 세마포어 (Semaphore):
    • 동시에 여러 스레드가 자원에 접근할 수 있는 허용 개수를 지정할 수 있는 동기화 기법입니다.
    • Counting Semaphore 과 Binary Semaphore로 나뉘며, Counting Semaphore은 여러 자원을 제어할 수 있습니다.
    • Semaphore는 초기값과 현재 값을 비교하여 스레드의 접근을 허용하거나 차단합니다

두 기법의 주요 차이

  • Mutex : 단일 자원에 대한 접근을 보호
  • Semaphore: 동시 접근 허용의 유연성을 제공

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

[OS] 경쟁상태 (Race Condition)  (1) 2024.06.19
[ OS ] 문맥교환 (context switch)  (0) 2024.06.18
[ OS ] 시스템 콜 (system call)  (0) 2024.06.18

 공유 자원에 대해 두개 이상의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태

→실행순서에 따라 결과값이 달라질수 있는 상태

 

경쟁상태에서 직면할 수 있는 문제

Mutual exclusion(상호배제) 위반 문제

  • 자원은 한 번에 하나의 프로세스 또는 스레드만이 사용할 수 있어야 한다.

deadlock (교착상태)

  • 멀티프로세스나 멀티스레드 환경에서 발생할 수 있는 상황으로, 각 프로세스 또는 스레드가 서로가 가지고 있는 자원을 점유한 채로 다른 프로세스 또는 스레드가 필요로 하는 자원을 기다리는 상태를 말합니다
  • 각 프로세스가 서로 필요로 하는 자원을 점유한 채 대기 상태에 빠진상태

starvation(기아상태)

  • 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리다가 끊임없이 필요한 컴퓨터 자원을 가져오지 못하는 상황을 말합니다.
  • 특정 프로세스가 필요한 자원을 영원히 할당받지 못하여 작업을 진행하지 못하는 상태

예방 방법

두 개 이상의 프로세스가 동시에 하나의 자원을 사용할 수 없도록 막아야한다.

이를 실현하기 하기 위한 방법으로  Mutex (Mutual Exclusion) 와 Semaphore(세마포어) 가 있다.

  • Mutex : 공유된 자원의 데이터를 여러 스레드가 접근하는 것을 막는 방법
  • Semaphore: 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것, 하나의 스레드만 들어가게 할 수도 있고 여러 개의 스레드가 들어가게 할 수 있다

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

[ OS ] 세마포어 와 뮤텍스  (0) 2024.06.19
[ OS ] 문맥교환 (context switch)  (0) 2024.06.18
[ OS ] 시스템 콜 (system call)  (0) 2024.06.18

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말한다. 

- 한 프로세스의 상태는 프로세스 제어 블록 (PCB, process controll block)에 저장되어 있다.

- 문맥을 교환하는 동안 유용한 작업을 수행할 수 없기 때문에  너무 빈번한 문맥교환은 큰 오버헤드가 발생한다.

 

*프로세스 제어 블록 : 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조

*오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 

 

Switching cases

- 멀티테스킹

- 인터럽트 처리

- 사용자 모드와 커널 모드 간 전환

 

 

 

참고자료

https://ko.wikipedia.org/wiki/%EB%AC%B8%EB%A7%A5_%EA%B5%90%ED%99%98

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

[ OS ] 세마포어 와 뮤텍스  (0) 2024.06.19
[OS] 경쟁상태 (Race Condition)  (1) 2024.06.19
[ OS ] 시스템 콜 (system call)  (0) 2024.06.18
일반적인 프로그램들은 사용자 모드에서 실행되므로 커널 모드에 대한 직접적인 접근이 불가능하다. 하지만 커널에 접근할 수 없으면 사용자 모드의 프로세스들이 파일을 쓰거나 불러올 수 없고 그래픽 처리와 같은 거의 모든 작업을 할 수 없다. 따라서 커널에 요청하여 커널 모드에서 처리하고 그 결과를 사용자 모드의 응용 프로그램에게 전달하는 것이 바로 시스템 콜이다. 시스템 콜은 프로그램의 거의 모든 코드의 실행에서 발생하며 파일 생성이나 쓰기 또는 읽기, 키보드 입력, 그래픽 출력, 스레드 생성 및 제어 같은 것도 시스템 콜을 통해 커널에 요청하여 커널 모드에서 처리한다. 

 

- 시스템 호출 또는 간단히 시스콜(syscall) 이라도 불린다.

- 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

- 응용 프로그램에서 커널의 서비스를 사용하는 방법

- 프로그래밍 언어에서 지원하지 않는 기능에 대하여 운영 체제의 루틴을 호출하여 이용하는 것

 

시스템 호출의 세 가지 기능

1. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.

2. 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다.

3. 커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.

 

예를 들어

실행 중인 프로그램(응용프로그램)에 있는 함수가 아닌 커널에 있는 함수(파일 생성이나 쓰기 또는 읽기)를 호출할 때 사용되는 방법

 

시스템콜은 운영 체제의 커널이 제공하는 서비스에 프로그램이 접근할 수 있게 해주는 인터페이스

 

참고 자료

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

[ OS ] 세마포어 와 뮤텍스  (0) 2024.06.19
[OS] 경쟁상태 (Race Condition)  (1) 2024.06.19
[ OS ] 문맥교환 (context switch)  (0) 2024.06.18

+ Recent posts