일단 씻고 나가자

23.04.27 본문

Study/닥치는 대로 주워 담기

23.04.27

일단 씻고 나가자 2023. 4. 28. 01:37

2023. 04. 27 목요일

 

- [DB] 오라클에서 정규식을 사용하는 함수?

: 오라클은 10g부터 정규식을 지원한다.

REGEXP라는 함수를 지원하며, 추가로 여러 기능을 제공한다.

작성 방식은 WHERE 이후 원하는 함수명을 적고, 첫 매개변수에 컬럼명, 두 번째 매개변수에 정규식을 적으면 된다.

https://neocan.tistory.com/348

 

 

- 동기화 이슈 해결은 무엇이며 주요 키워드와 종류?

: Mutual exclusion은 임계 자원을 다른 스레드가 접근하지 못하는 기법으로서, 상호 배제로서 해결할 수 있다. 이는 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access가 필요함을 일컫는다.

 

Mutual exclusion의 주요 키워드는 두 가지가 있다.

임계 자원 (critical resource) - 공유 자원

임계 영역 (critical section) - 공유 자원이 위치한 코드의 위치, 범위

임계 자원에 대해 lock을 걸어 스레드의 이용에 제한을 거는 것을 일컫는다.

 

Mutual exclusion에는 MutexSemaphore가 있다.

Mutex은 하나의 열쇠로 임계 영역엔 하나의 스레드만 들어갈 수 있도록 하는 방법론이며,

Semaphore는 열쇠의 개수를 정해주는 방법이다.

Semaphore는 하나의 스레드만이 임계 영역에 접근할 수 있을 때 생기는 비효율성을 해결하기 위해 제한적인 개수로 걸어놓는 방법이며, 당연히 동기화 이슈가 생길 수 있다. 이런 문제 때문에 보통 Mutex를 많이 쓴다.

 

+) 추가로 Python 같은 경우는 내부적인 이슈 때문에 스레드를 지원하진 않는다.

 

 

- 데드락이란? 스타베이션이란? 데드락의 조건?

: Dead Lock. 교착상태. 무한 대기 상태를 말한다. 두 개 이상의 작업이 상대방의 작업이 끝나기만을 기다리는 상태이다. 근본적인 해결 방법은 임계 영역의 내부 코드가 다른 임계 영역의 내용을 이용하지 않도록 분리하는 방법이다.

 

Starvation. 기아 상태. 우선순위가 낮아서 자원을 계속 할당받지 못하는 상태. 해당 프로세스의 우선순위를 높여주면 된다. 우선순위를 쓰는 코드에서만 보이는 현상이다.

 

데드락의 조건은 1971E. G. 코프만 교수가 보인 4가지 필요조건에 의한다. 4가지 중 하나라도 만족하지 않는다면 데드락은 발생하지 않는다.

1. Mutual exclusion 상호 배제

// 공유 자원에 대해 배타적인 통제권을 요구.

 

2. Hold and wait 점유 대기

// 프로세스가 자원을 가진 상태에서 다른 자원을 기다린다.

 

3. No preemption 비 선점

// 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.

 

4. Circular wait 순환 대기

// 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

 

 

- exec() 함수란?

: 덮어쓰기의 함수. 호출된 프로세스 내에서 인자로 받은 실행파일(바이너리 이미지 파일)을 덮어씌우게 된다. 즉 기존 부모 프로세스는 소멸한 것으로 이해할 수 있다.

https://velog.io/@gyrbs22/%EC%A0%84%EC%82%B0%ED%95%99-%EB%A6%AC%EB%88%85%EC%8A%A4-exec-%ED%95%A8%EC%88%98-IPC%EA%B8%B0%EB%B2%95-Copy-on-Write-mmap-%ED%95%A8%EC%88%98

 

 

- 부모, 자식 간의 프로세스 관계에서 삭제 시 발생하는 현상 두 가지?

1. 고아 프로세스 (Orphan Process)

// 부모 프로세스가 먼저 종료되었을 때 자식 프로세스를 일컫는다.

커널이 해당 자식 프로세스를 init의 자식 프로세스로 연결해준다.

 

2. 좀비 프로세스 (Zombie Process)

// 자식 프로세스가 먼저 종료되었을 때, 부모 프로세스가 종료된 자식 프로세스의 종료 상태를 wait()으로 회수하지 않았을 때 자식 프로세스를 일컫는다.

자식이 종료 후 부모 프로세스가 해당 자식의 정보를 알고 싶을 수 있기 때문에 PID, 종료 상태 등의 최소한의 정보를 커널은 가지고 있는다. 이를 wait()으로 회수하면 최종 제거된다.

 

 

- Copy-on-write 기법이란?

: fork()처럼, 리소스가 복제되었지만 수정되지 않은 상태에 새 리소스를 만들 필요 없이 원본과 리소스를 공유하다가 복사본이 수정되었을 때만 새 리소스를 만드는 기법.

https://code-lab1.tistory.com/58

 

 

'Study > 닥치는 대로 주워 담기' 카테고리의 다른 글

23.05.01  (0) 2023.05.02
23.04.28  (0) 2023.04.29
23.04.26  (0) 2023.04.28
23.04.24  (0) 2023.04.25
23.04.21  (0) 2023.04.22