목록3학년 1학기 (106)
오래 못 할 짓 하지 않기

교착 상태 해결 방법 3가지 1. 예방 : 애초에 교착 상태가 발생하지 않도록 : 교착 상태 발생 조건 중 하나를 없애버리기 ( 상호 배제, 점유와 대기, 비선점 , 원형 대기 ) - 상호 배제를 없애기 : 모든 자원을 공유하게 만든다? → 현실적으로 불가능 - 점유와 대기 없애기 : 특정 프로세스에 자원을 모두 할당 or 아예 할당 X 인 방식으로 배분 → 자원의 활용률을 떨어뜨린다. - 비선점 없애기 : 선점이 가능한 자원 (ex:CPU)에 한해 효과적 하지만 모든 자원이 선점 가능한 것은 아니다. ex) 프린터 - 원형 대기 조건 없애기 : = 더보기 - 한계점 1) 모든 자원에 번호를 붙이는 것은 어렵다. 2) 어떤 자원에 어떤 번호를 붙이냐에 따라 활용률이 달라진다. [ 교착 상태 예방 : 결론..

포크 = 실행에 필요한 자원 철학자 = 프로세스 식사 = 실행 서로가 점거하는 자원을 서로가 기다리고 있으면 어떠한 프로세스도 실행될 수 없다. 교착 상태 ( Dead Lock ) : 일어나지 않을 사건을 기다리면서 진행(실행)이 멈춰 버리는 현상 서로의 할당이 해제될 때까지 무작정 기다림 ● 해결하기 위해서... 1. 교착 상태가 발생했을 때의 상황을 정확히 표현해보기 → 자원 할당 그래프 : 교착 상태 발생 조건 파악 가능 - 어떤 프로세스가 어떤 자원을 할당 받아 사용 중인지 확인 가능 - 어떤 프로세스가 어떤 자원을 기다리는 중인지 확인 가능 식사하는 철학자 예시의 자원 할당 그래프는 아래와 같다 교착 상태가 일어난 그래프 = 원의 형태를 띄고있다. ● 교착 상태가 일어나는 근본적인 이유 1. 교..

프로세스 동기화 방법에는 1. 상호 배제 2. 실행 순서 제어 이 두 가지를 이용하여 동기화 하는 기법들을 알아볼 거시다 뮤텍스 락 상호 배제를 이용한 동기화 도구 = 자물쇠 역할 탈의실 : 임계 구역 ( in 자원 ) 프로세스 : 손님 탈의실이 잠겨있다면, 사람이 있다는 것이다. ● 구현법 구성 : 전역 변수 하나 + 함수 두 개 - 자물쇠 역할 : 변수 lock (boolean) - 임계 구역을 잠그는 역할 : acquire 함수 → 작업 시작할 때 잠근다 : 프로세스가 임계 구역에 진입하기 전에 호출 if 임계 구역이 잠겨있다면 ▶ (임계 구역이 열릴 때까지) 임계 구역을 반복적으로 확인 if 임계 구역이 열려있다면 ▶ 임계 구역을 잠그기 - 임계 구역을 잠금을 해제하는 역할 : release 함수..

저번 예제에 이어서... K가 H에게 20만원을 이체할 때 H도 본인 계좌에 30만원을 입금하면, 여러 형태의 실행이 가능할 수 있다. 가능한 Case 1. K에게 20을 받고, 본인에게 입금한 30넣고 2. 본인에게 30먼저 입금 , K가 H에게 20 입금 3. K가 송금 , 본인에게 30 추가 , K에게 받은 20 추 4. 1. K 잔고 확인 후 20만원 차감 2. H 잔고 확인 후 3. ( 본인 잔고 확인 후, 본인에게 30 추가 ) → 230만원 4. 2에서 확인한 값에서 20 추가 → 220만원 Transaction 을 이루고 있는 명령어 하나하나를 Operation이라고 한다. 그 Operation을 간략화 시킬 수 있는데 - Read = r - Write = w - Commit = c ▶ 그..

[ 배경 ] 프로세스들을 동시다발적으로 실행되며 , 그 과정에서 서로 협력하며 영향을 주고 받는다. 그 과정에서 자원의 일관성도 보장해야한다. 이를 위해 필요한 것이 프로세스와 스레드의 동기화 이다. 더보기 * 실행의 문맥을 갖는 모든 대상 = 동기화의 대상 따라서 스레드도 동기화의 대상이다. 하지만 편의상 그냥 프로세스 하나만 명칭으로 붙인다. 동기화 : 프로세스들의 수행 시기를 맞추는 것 1. 실행 순서 제어를 위한 동기화 : 프로세스를 올바른 순서대로 실행하기 예) reader writer problem - Writer : Book.txt 파일에 값을 저장하는 프로세스 - Reader : Book.txt 파일에 저장된 값을 읽어들이는 프로세스 → 이 두 프로세스는 무작정 실행되어서는 안 된다. 실행..

알고리즘 종류 7개 각 스케줄링의 [ 작동 방식 , 특징 및 장단점 ] 을 위주로 알아두면 된다. 1. 선입 선처리 2. 최단 작업 우선 3. 라운드 로빈 4. 최소 잔여 시간 우선 5. 우선순위 6. 다단계 큐 7. 다단계 피드백 큐 스케줄링 ● 선입 선처리 - First Come , First Served 스케줄링 - 단순히 준비 큐에 삽입된 순서대로 처리 - 비선점 스케줄링 (앞에 먼저 온 애가 CPU 쓸 때 못 뺏어오니까 단점 : 프로세스들이 기다리는 시간이 매우 길어질 수 있다.= 효위 효과 // 공정하지만 효율성을 떨어진다. A가 기다리는 시간 : 0 B가 기다리는 시간 : 17 C가 기다리는 시간 : 22 ● 최단 작업 우선 - Shortest Job First - 위에 생겼던 호위효과를 방..

도입 예제 J가 H에게 20만원을 이체했을 때, 각자의 계좌는 어떻게 변하는가? 은행 입장에서는 이 두 가지 SQL문이 정상적으로 실행되어야 함. Transaction 둘 다 정상 처리되어야만 성공하는 단일 작업 ● 단일한 논리적인 작업 단위 ● 논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어 나눠질 수 없게 만든 것 ● 일부만 성공하면 DB에 반영 X Transaction 형태는 ▶ Start Transaction; ▶ [' 실행하고 싶은 SQL문들 적기. '] ▶ COMMIT; // 지금까지 작업한 내용을 DB에 영구적으로 저장 + Transaction 종료 위 이체 관련 예제를 SQL에서 실행해보자 이런 뒤에 Start Transaction; update account SET balance =..

CPU 스케줄링 : OS가 프로세스들에게 CPU 자원을 배분하는 것 ● 프로세스 우선순위 주로 빨리 처리해야하는 프로세스들에게 = 프로세스마다 우선순위가 다르다. 입출력 작업이 많은 프로세스 = 입출력 집중 프로세스의 우선순위가 CPU 작업이 많은 프로세스 = CPU 집중 프로세스의 우선순위보다 높다. 이유 : 입출력 완료까지 실행하는 시간보다는 대기하는 시간에 있기 때문에 , 입출력 집중 프로세스에 빨리 주고 대기하게 하고, CPU 집중 프로세스가 편하게 쓰게 해준다. = 빨리 하고 나와라 ● 우선순위 배분 OS가 PCB를 보고 어떤 프로세스가 CPU를 많이 사용할지 정한다. 하지만 OS가 모든 프로세스의 PCB를 보는 것은 시간적으로 낭비가 크다. 스케줄링 큐 : 특정 자원을 사용하려고 하는 프로세스..

Trigger : DB에서 어떤 이벤트가 발생하면 실행되는(Trigger되는) Procedure = Insert Update Delete 예) USERS 테이블에 있는 사용자의 닉네임을 바꾸면 USERS_LOG 테이블에 이전 닉네임 + 언제까지 썼는지 업데이트하기 delimiter $$ ▶ Create TRIGGER log_user_nickname_trigger ▶ Before UPDATE // 언제 발생시킬거냐? = Update가 일어났을 때 ▶ On users FOR EACH ROW // users 테이블에서 변화가 발생하면 , Update가 되는 각 row에 대해 trigger 실행 ▶ Begin //프로시저 body에는 trigger 조건이 되었을 때 어떤 걸 실행할지 정한다. ▶ insert i..

파이썬에서 프로세스 확인하기 Import os 한 뒤에 import os print("hello world") print("my pid is", os.getpid()) 이렇게 만들어 보았다. os 라이브러리에 있는 getpid() 메소드를 이용하면 내가 사용하고 있는 프로세스의 id를 알 수 있다. 매번 실행 때마다 os가 pid를 주는 것이 다르므로 pid값도 다르게 나온다 정확히는 실행이 끝나면 pid를 수거해가기 때문에 다음 실행에 새로운 pid를 받는다고 생각하면 된다. 다음 예시는 [ parent 프로세스 > parent가 만든 child 프로세스 > 그 child 프로세스에서 찾는 parent프로세스 ] 이렇게 찾는 걸 해볼거다 코드는 다음과 같다. from multiprocessing imp..