[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 4-3) 스레드와 관련된 문제들 (Threading Issues)

극꼼 2023. 1. 27. 00:22
반응형


1. Fork(), Exec() 시스템 콜

: fork(), exec()은 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용됩니다. 둘 다 Process Control 영역의 시스템 콜입니다.

 

* fork() : 새로운 프로세스를 위한 메모리를 할당하고, 메모리에 fork()를 호출한 프로세스를 전부 복사 -> 원래 프로세스는 원래의 본인의 작업을 실행하고, 생성된 프로세스는 시스템 콜한 다음 라인부터 실행. = 생성

* exec() : 새로 메모리를 할당하지 않고, exec()에 의해 호출된 프로세스만 메모리에 남게 됨. = 덮어씀

 

exec()을 호출할 때 원래의 프로세스가 사라져버리므로, 이럴 때 일반적으로 fork()가 필요합니다.

 


2. 취소(Cancellation)

: 스레드가 끝나기 전에 강제 종료시키는 작업입니다. 

 

* 목적 스레드 = 취소되어야 할 스레드

 

<취소 방식>

1) 비동기식 취소(asynchronous cancelation) : 한 스레드가 목적스레드를 즉시 강제 종료시킵니다.

비동기식 취소는 운영체제가 취소된 스레드로부터 자원을 회수하지 못할 수 있습니다.

 

2) 동기식 취소(deferred cancelation) : 목적 스레드가 주기적으로 본인이 강제 동료 대상인지 확인합니다.

동기식 취소에서는 스레드들이 취소 여부를 결정하기 위해 플래그를 검사하고, 본인이 취소되어도 안전하다 판단되는 시점(취소점. Cancellation point)에 취소 여부를 검사합니다.

 


3. 신호 처리(Signal Handling)

: signal은 특정 사건이 발생했을 때 생성되며, 프로세스에게로 전달됩니다. signal이 전달되면 프로세스는 signal 처리 함수로 반드시 처리해야 합니다. 디폴트 신호 처리기는 커널에 의해 실행됩니다.

 

<다중 스레드 프로그램에서의 signal 처리 방식>

1) 신호가 적용될 스레드들에게 전달

2) 모든 스레드들에게 전달

3) 일부 스레드에게 선택적으로 전달

4) 특정 스레드가 모든 신호를 전달받도록 지정

 

<signal 방식>

1) 동기식 신호 : 불법적인 메모리 접근, 0으로 나누기. 동기식 신호는 해당 signal을 유발한 스레드들에게 전달되어야 합니다. 

2) 비동기식 신호 : 외부로부터 발생되는 프로세스의 signal. 특수 키를 눌러 프로세스를 강제 종료하거나, 타이머가 만료되는 등의 예시가 있습니다. 비동기식 신호는 일반적으로 다른 프로세스에게로 전달되는데, 이는 명확하지 않기 때문입니다.

 

 

 

 

반응형