전체 글

전체 글

    [전공생이 설명하는 OS] 동기화 - (6) 식사하는 철학자 문제 (코드 포함)

    [전공생이 설명하는 OS] 동기화 - (6) 식사하는 철학자 문제 (코드 포함)

    Dining Philosopher Problem 식사하는 철학자 문제는 다익스트라 선생님께서 논문을 통해 제시하신 대표적인 데드락 상황이다. 위와 같이 원형의 탁자에 5개의 포크가 놓여있다. 스파게티를 먹기 위해서는 2개의 포크를 사용해야한다는 규칙이 있다. 이 상황에서 5명의 철학자가 포크를 한 개씩 잡고 데드락에 빠지면 모두가 굶어 죽는 starvation 이 발생한다..! 철학자가 다 굶어죽는 c++ 코드는 다음과 같다. 더보기 #include #include #include #include #define NUM 5 sem_t forks[NUM]; // forks void *philosopher(void*); int main(){ pthread_t threads[NUM]; for(int i=0; i

    [전공생이 설명하는 OS] 동기화 - (5) Deadlock

    [전공생이 설명하는 OS] 동기화 - (5) Deadlock

    Review 쓰레드(Thread)와 동기화 문제 동기화 - (1) 용어 및 개념정리 동기화 - (2) 상호배제 전략(Mutex) 동기화 - (3) 조건동기화 (pthread 예시) 동기화 - (4) 생산자 소비자 문제 지금까지 race condition 이 발생하는 이유와, 이를 해결하기 위해 다양한 동기화 기법이 필요하다는 점을 설명했다. 특히 이전 포스팅에서는 할당 가능한 자원의 개수를 (0~MAX)개로 제한하는 web server request buffer 를 살펴보면서 `생산자-소비자 문제`(bounded buffer problem) 를 해결해보았다. 이번에는 동기화로 인해 발생할 수 있는 심각한 문제인 교착상태(deadlock)을 알아보도록 한다. 1. Deadlock 이란? 다수의 스레드 또는..

    [전공생이 설명하는 OS] 동기화 - (4) 생산자 소비자 문제

    Reviews 쓰레드(Thread)와 동기화 문제 동기화 - (1) 용어 및 개념정리 동기화 - (2) 상호배제 전략(Mutex) 동기화 - (3) 조건동기화 (pthread 예시) 여태까지, 멀티프로세스 또는 멀티쓰레드 환경에서 공유자원을 사용하다보면 race condition 이 발생할 수 있고 이를 해결하기 위해서는 동기화가 필요함을 설명했다. 동기화에는 상호배제(Mutual Exclusion) 전략과 조건 동기화(Condition Synchronization) 전략이 있다. 상호배제는 공유자원을 한번에 하나씩 사용하는데 집중한다. 비슷하지만 조건동기화는 다수의 실행흐름을 제어하는데 더 유리하다. Critical Section에 대기하는 프로세스(또는 쓰레드)를 Ordering 하는 전략이다. 지난..

    [전공생이 설명하는 OS] 동기화 - (3) 조건동기화 (pthread 예제 코드 포함)

    [전공생이 설명하는 OS] 동기화 - (3) 조건동기화 (pthread 예제 코드 포함)

    Review 쓰레드(Thread)와 동기화 문제 동기화 - (1) 용어 및 개념정리 동기화 - (2) 상호배제 전략(Mutex) 이전 포스팅에서 지속적으로 언급했듯이, 멀티프로세스 또는 멀티쓰레드 환경에서 공유자원을 사용하다보면 race condition 이 발생할 수 있고 이를 해결하기 위해서는 동기화가 필요하다. 동기화에는 상호배제(Mutual Exclusion) 전략과 조건 동기화(Condition Synchronization) 전략이 있다. 지난 포스팅까지는 상호배제의 관점에서 동기화를 알아보았다. 상호배제는 공유자원은 한번에 하나씩 사용하는데 집중한다. 비슷하지만 조건동기화는 Critical Section에 대기하는 프로세스(또는 쓰레드)를 Ordering 하는 전략이다. 조건 동기화 조건동기화..

    [전공생이 설명하는 OS] 동기화 - (2) 상호배제 전략 (Mutex)

    [전공생이 설명하는 OS] 동기화 - (2) 상호배제 전략 (Mutex)

    지난 포스팅(동기화 - (1) 용어 및 개념정리)에서 정리했듯이, 동기화는 Critical Section 에 대한 접근 제어를 적절하게 잘 한다는 것이고, 구체적으로 MutualExclusion / Progress / BoundedWaiting 3가지의 requirement를 만족시켜야한다고 언급했다. 이런 특성을 만족시키는 동기화 전략은 (1)상호배제, (2)조건부 동기화 전략이 있는데, 이번 포스팅에서는 상호배제의 측면에서 동기화 기법을 살펴보도록 한다. 상호배제 차원의 동기화 전략은 SW의 방식과 HW의 방식으로 나눌 수 있다. 1. SW approach 크게 1) Peterson의 알고리즘, 2) Interrupt 차단방식 두가지를 예로 들 수 있다. 결론부터 이야기하자면, SW 방식의 동기화 전..

    [전공생이 설명하는 OS] 동기화 - (1) 용어 및 개념정리

    동기화 문제가 왜 발생하는지에 대해서는 [전공생이 설명하는 OS] 쓰레드(Thread)와 동기화 문제 의 마지막 단락을 참고해주세요. [동기화 관련 용어] (1) Race Condition : 멀티쓰레드 또는 멀티 프로세스 환경에서 공유자원에 동시에 접근할 때, 의도치 않은 결과를 낳는 것을 race condition이라고 하고 다음과 같은 특성을 갖는다. 근본적으로는 [cpu 스케줄링 + 캐시(레지스터 포함) + non-atomic instruction] 때문에 발생하며, 이를 방지하기 위해서는 공유자원에 대한 동기화가 필요하다. Non-Deterministic : 의도하지 않은 결과를 내는데, 결과를 예측할 수 없다. Reproducible : 재현 가능하다. (2) Critical Section :..

    OAuth2 naver 회원 id 형식 문제 (네아로)

    로컬 개발하는데, 네이버 회원정보 응답이 다음처럼 왔다. { "resultcode" : "00", "message" : "success", "response" : { "id" : "YxvaJNE49NQj-SH9geGSXWKN116r6dIXIqlfU597RS8", "profile_image" : "https://ssl.pstatic.net/static/pwe/address/img_profile.png", "gender" : "M", "email" : "...", "mobile" : "...", "mobile_e164" : "...", "name" : "..." } 기존 db에 있는 response.id 값은 분명 숫자인데, 갑자기 인코딩 된 값이 들어와서 당황했다. 2021년 5월 1일 이후에 만들어진 o..

    RSA 파이썬 구현 (key pair generator)

    rsa 는 두 소수의 곱으로 이루어진 어떤 수 n를 소인수분해하는 문제가 어렵다는 점을 이용한다. 따라서 n 이 충분히 큰 수여야하고, n 을 두 소수로 소인수분해할 수 있으면 암호가 깨진다. main 함수 키 쌍을 생성한 후, 암호화 복호화가 잘 이루어지는지 확인한다. """ RSA test """ if __name__ == "__main__": e, d, n = keygen(512) # 512-bits 키 생성 M = 88 # 평문 C = encrypt(M, e, n) # 암호문 MM = decrypt(C, d, n) # 복호화한 평문 if M == MM: print("Example of RSA Algorithm works successfully") print("M={}, PU=({},{}), PR=..