목록3학년 1학기 (104)
오래 못 할 짓 하지 않기
프로세스 동기화 방법에는 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..
스레드(thread) : 프로세스를 구성하는 실행 흐름의 단위 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. ● 실행 흐름이 하나인 프로세스 ( = 단일 스레드 프로세스 ) ● 실행 흐름이 여러 개인 프로세스 ( = 멀티 스레드 프로세스 ) → 프로세스를 이루는 여러 명령어를 동시에 실행 가능하다. 어떻게 여러 스레드가 동시에 나누어져서 실행될 수 있을까?? ● 스레드의 구성요소 : 스레드 ID / PC를 비롯한 Register 값 / Stack 실행에 필요한 최소한의 정보를 유지한 채 실행된다. 하지만 하나의 프로세스 내에 있는 스레드들은 해당 프로세스의 자원을 공유할 수 있다. 멀티 프로세스 vs 멀티 스레드 동일한 작업을 수행하는 단일 스레드 / 프로세스 여러 개 [ = 멀티 프로세스 ] ..
Three-tier architecture ● Presentation : 보여지는 부분 담당 ● Logic : 서비스 관련 로직 담당 ● Data : 데이터 저장 및 관리 담당 당근마켓 예시로 Logic과 Data tier를 분석해보자 이렇게 Logic tier 에 기능이 들어가고 Data tier에 정보들이 담긴다 하지만 Data tier에서 사용되는 Stored procedure의 사용 목적은 비즈니스 로직 구현이다. 즉 Data tier 에 Business Logic을 넣는다는 것 Stored procedure의 장점 1) Application에 transparent하다. : 어떤 걸 바꾸어도 크게 틀을 바꾸지 않고도 내용을 바꿀 수 있다. = Procedure 없이 코드를 작성했을 시에는 모든 걸..