일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- flask
- Python
- class
- TypeScript
- mongoose
- Sequelize
- JavaScript
- 정렬
- Dinosaur
- dfs
- GIT
- Nest.js
- nestjs
- MySQL
- OCR
- 공룡게임
- react
- jest
- MongoDB
- typeORM
- nodejs
- 자료구조
- Express
- Bull
- AWS
- cookie
- game
- 게임
- Queue
- Today
- Total
목록CS (Computer Science) (35)
포시코딩
키워드 process synchronization, concurrency control, 병행 제어, semaphore, monitor Process Synchronization concurrency control, 병행 제어라고도 부른다. Semaphore 프로그래머 관점에서 concurrency control을 잘하기 위한 방법을 제공하기 위한 수단으로 P 연산과 V 연산으로 구성된 일종의 추상자료형 P 연산: 자원을 획득하는 과정을 나타내는 연산 V 연산: 자원을 반납하는 과정을 나타내는 연산 고전적인 프로세스 동기화 문제 세 가지 Bounded-Buffer Problem(Producer-Consumer Problem) Readers and Writers Problem Dining-Philosoph..
키워드 semaphore, synchronization, bounded-buffer problem, producer-consumer problem, readers and writers problem, dining-philosophers problem, monitor Classical Problems of Synchronization Bounded-Buffer Problem(Producer-Consumer Problem) Readers and Writers Problem Dining-Philosophers Problem Bounded-Buffer Problem (=Producer-Consumer Problem) Buffer: 임시로 데이터를 저장하는 공간 Buffer의 크기가 유한한 환경에서의 생산자-소비..
키워드 semaphores, busy-wait, block/wakeup, deadlock, starvation Semaphores P(S): while (S 식사하는 철학자 문제에서 더 자세히 Dining-Philosophers Problem (=식사하는 철학자 문제) starvation 한쪽에서 식사를 위해 양쪽의 젓가락을 잡은 경우 그 옆에 사람은 식사를 마칠 때까지 기다리지만 만약 식사가 끝난 직후 옆옆 사람이 양쪽 젓가락을 잡고 식사를 시작하고, 그게 반복되면 그 중간의 사람은 영원히 식사를 할 수 없게 됨 deadlock 만약 모든 사람이 동시에 왼쪽 젓가락을 잡아 버리면 다섯 명이 모두 영원히 식사를 하지 못하게 됨
키워드 critical-sectioin, peterson's algorithm, synchronization hardware, semaphores The Critical-Section Problem 프로그램적 해결법 충족 조건 Mutual Exclusion(상호 배제) 어떤 프로세스가 크리티컬 섹션에 들어가 있으면 다른 모든 프로세스는 크리티컬 섹션에 들어가지 못하게 한다. Progress(진행) 크리티컬 섹션에 아무도 들어가있지 않은 상황에서 내가 들어가고자 하면 들어가게 해줘야 한다. 둘이 동시에 들어가려는 상황에서 둘 다 안들어가있음에도 둘 다 못들어가는 문제 고려 Bounded Waiting(유한 대기) 기다리는 시간이 유한해야함 크리티컬 섹션에 들어가고자 하는 프로세스가 세 개 있을 때 둘이서만..
키워드 synchronization, race condition, critical section 데이터의 접근 추상적으로 아래와 같이 구분됨 Storage Box: 데이터가 저장되어 있는 위치 Execution Box: 실제 연산하는 위치 데이터를 읽기만 하면 누가 먼저 읽든, 읽는 동안 다른 곳에서 읽든 문제될 게 없지만 데이터를 읽어와 연산 후 데이터를 수정하여 저장하는 방식에서는 누가 먼저 읽었느냐에 따라 결과가 달라질 수도 있는 등 여기서 생기는 문제를 Synchronization 문제라고 한다. 마찬가지로 한 곳에선 데이터를 증가시키려 하고 다른 곳에선 데이터를 감소시키려 하면 문제가 발생 -> Race Condition(경쟁 상태) Multiprocessor system처럼 메모리를 공유한다면..
키워드 multiple-processor scheduling, real-time scheduling, thread scheduling, algorithms evaluation, 알고리즘 평가 Scheduling Algorithms Multiple-Processor Scheduling CPU가 여러 개 있는 시스템에서의 스케줄링 Homogeneous processor 어떤 Job은 특정 CPU가 실행해야 되는 경우 ex) 미용실 갔을 때 제일 눈 앞에 보이는 사람한테 깎지 않고 지명한 사람한테 깎는 경우 Load sharing 특정 CPU만 일하고 나머지 CPU는 놀지 않도록 부하를 적절히 조절하는 메커니즘 필요 별개의 큐를 두는 방법 vs 공동 큐를 사용하는 방법 Symmetric Multiprocess..
키워드 scheduling algorithms, 성능 척도, fcfs, sjf, priority scheduling, round robin, multilevel queue, multilevel feedback queue Scheduling Algorithms 성능 척도 (Scheduling Criteria = Performance Index = Performance Measure) 시스템 입장에서의 성능 척도 CPU utilization(이용률) 전체 시간 중 CPU가 놀지 않고 일한 시간의 비율 최대한 일 시키기 Throughput(처리량) 주어진 시간 동안 몇 개의 작업을 완료했나 프로세스 입장에서의 성능 척도 Turnaround time(소요 시간, 반환 시간) 프로세스가 CPU를 쓰러 들어와서 다..
키워드 cpu scheduling, cpu burst, i/o burst, i/o-bound process, cpu-bound process, cpu scheduler, dispatcher, nonpreemptive, preemptive CPU Scheduling CPU burst: CPU만 연속적으로 쓰는 단계 I/O burst: I/O만 연속적으로 쓰는 단계 어떤 프로그램이든 프로그램이 실행된다는 것은 CPU burst와 I/O burst를 반복하며 실행된다. 컴퓨터 안에는 똑같은 종류의 프로그램이 있는게 아니라 아래의 종류가 섞여있음 CPU를 짧게 쓰고 중간에 I/O 작업이 들어오는 작업을 I/O bound job이라 함 CPU를 굉장히 오랫동안 쓰는 작업을 CPU bound job이라 함 이렇게 ..
키워드 fork, exec, wait, exit, 시스템 콜, 협력, IPC, message passing fork() 시스템 콜 부모 프로세스가 코드를 실행하다 fork()를 만나면 자식 프로세스가 생성됨 부모 프로세스는 이어서 밑의 코드 계속 실행 자식 프로세스는 새롭게 만들어졌지만 메인 함수의 처음부터 실행하는게 아니라 fork()를 실행한 그 이후부터 실행 부모 프로세스의 문맥(컨텍스트)를 그대로 복사하기 때문에 PC가 가리키는 곳 그대로 복사되어 fork()가 끝나는 시점부터 실행 ex) 한 사람이 복제되면 애기를 낳는게 아니라 똑같이 생긴 사람이 하나 만들어진다고 생각 만약 자식 프로세스가 원본이라고 주장하거나, 제어 흐름이 같은 경우를 대비해 부모와 자식을 구분해야 함 -> 부모 프로세스는 ..
키워드 프로세스 생성, 프로세스 종료 프로세스 생성 직접 생성하지 않고 운영체제를 통해 생성한다. (시스템 콜) 부모 프로세스가 자식 프로세스 생성(복제 생성) 복제? -> 프로세스의 문맥을 모두 복제. 즉, 부모 프로세스의 주소 공간(메모리)인 code, data, stack을 그대로 복사해서 자식 프로세스를 만듦 또한, 부모 프로세스의 cpu 문맥(인스트럭션을 어디까지 수행했는가)을 나타내는 레지스터인 PC(Program Counter) 레지스터도 부모 것 그대로 복제 프로세스의 트리(계층 구조) 형성 프로세스는 자원을 필요로 함 운영체제로부터 받음 부모와 공유 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 리눅스나 일부 모델에선 자식 프로세스 생성 시 카피 전에 공유할 수 있는 건 일단 공유..