같은 코드를 여러번 실행시켜야 하는 상황이 있다고 하자. 이런 상황에서 프로세스를 여러번 실행 시킬 수도 있지만 프로세스는 한번만 실행시키고 그안에서 여러개의 쓰레드라는 또다른 실행의 끈(?)을 실행시킨다. 프로세스는 운영체제에서 독립적인 주소공간과, 프로세스 테이블에서의 한 엔트리(Process Control block= PCB)를 차지하게 되는데 같은 프로세스를 여러번 실행시키면 계속 주소공간과 PCB를 할당해야 하므로 오버헤드가 매우 커지게 된다. 하지만 한 프로세스 내에서 여러개의 멀티 쓰레드를 사용하면 프로세스를 할당할때보다 더 적은 자원을 사용해서 똑같은 일을 해낼 수 있게된다. 주소 공간이라는것은 위에서 보듯이 code,data,stack부분으로 나뉘게 된다. code부분에는 그 프로세스의 ..
Shortest Process Next 평균 응답시간(평균 대기시간)을 최소로 만드는것이 목표실행 대기중인 여러개의 프로세스들이 서로 연관이 있다고 가정하며, 바로 전에 실행된 프로세스의 실행시간이 이번 차례 프로세스의 예측 수행시간에 가장 큰 영향을 미친다. 다시 말해서, 이번에 실행될 프로세스 바로 전 프로세스가 cpu를 오랫동안 썼다면 이번에 실행될 프로세스 또한 cpu를 오래 쓸것으로 예상하는것이다.이 알고리즘은 각각의 프로세스의 실행시간들을 예측해놓고 가장 cpu를 적게 쓸것으로 예상되는것부터 실행시킨다.추정치 계산 식 = (바로전 프로세스의 예측치) * a + (1-a) * (바로전 프로세스의 실행시간) ->Aging이라고 한다. Guaranteed Scheduling 모든 프로세스가 할당된 ..
인터렉티브 시스템에서는 한 프로세스가 cpu를 독점하지 않도록 해야한다. 그러기 위해서 퀀텀이라는것을 사용한다.(퀀텀 == 한프로세스에게 할당된 cpu시간) Round Robin Scheduling배치 시스템의 스케쥴링 알고리즘중 SJF와 약간 구조는 비슷하다.SJF에서는 차례대로 들어오는 프로세스를 무조건 처리할때까지 cpu를 할당하지만 RR에서는 일정시간 cpu를 퀀텀동안 할당해주고 그 다음 프로세스를 차례대로 실행시키며 퀀텀을 다쓴 프로세스는 큐의 맨 뒤로 보내진다. 퀀텀을 얼만큼 할당해야 하는가?너무 짧은 경우 : process switch(context switch)가 많이 발생 해서 cpu 효율이 떨어진다. (오버헤드가 커진다)너무 긴 경우 : 반응시간이 안 좋아진다. 다른 프로세스들의 대기시..
배치 시스템에서 사용되는 스케쥴링 알고리즘들 First Come First Served 알고리즘 1개의 레디 큐 존재비선점형 방식(프로세스에 할당된 cpu를 자발적으로 내놓을때까지 뺏을수없다.)실행중인 프로세스가 블락되면 큐의 맨앞 프로세스가 실행 되고 블락된 프로세스가 다시 레디상태가 되면 큐의 맨 뒤로 이동된다.이해하기 쉽고 구현하기 간단한 알고리즘 Shortest Job First 알고리즘비선점형 방식프로세스의 실행시간이 미리 알려져있어야함. 최적의 평균 turnaround time(모든 job이 동시에 제출되어야 한다는 조건!!)모든 job이 동시에 제출된다고 가정했을때 turnaround time이 적은것부터 처리하는게 모든 프로세스를 가장 빠른 시간에 처리할수있다. 하지만 이 가정이 깨졌을때는..
스케줄링 기법스케줄링 기법은 사용중인 프로세스에서 자원을 빼앗을 수 있는지의 여부에 따라 선점 스케줄링 기법과 비선점 스케줄링 기법이 있다. ⓐ 선점(Preemptive) 기법 - RR, SRT, MFQ 등하나의 프로세스가 CPU를 점유하고 있을 때 다른 프로세스가 프로세서를 빼앗을 수 있는 방법을 선점 스케줄링이라고 한다. 선점 스케줄링 방식은 프로세스의 우선 순위가 높은 프로세스가 CPU를 먼저 차지하기가 용이하기 때문에 실시간 시분할 시스템에서 사용한다.- 우선 순위가 높은 프로세스가 먼저 수행되어야 할 때 유용하다.- 빠른 응답 시간을 요구하는 대화식 시분할 시스템이나 처리 시간이 제한되어 있는 실시간 시스템에 유용하다.- 많은 오버헤드를 초래한다.(컨텍스트 스윗칭) ⓑ 비선점(Non-preemp..
식사하는 철학자 문제철학자들은 생각하거나, 밥을먹거나, 배가고프거나 3가지 상태를 가질 수 있다.철학자들은 밥을 먹을때 왼쪽 포크와 오른쪽 포크를 각 손에 하나씩 들어야 식사를 할 수 있다.하지만 사람이 5명인데 포크는 5개밖에 없다. 그래서 최대 2명만 동시에 밥을 먹을 수 있다. 프로세스가 어떤 공유자원(여기선 포크)을 가지고 아무한테도 주지 않으면서 다른 프로세스의 공유자원을 달라고 요구하게 되면 데드락이 발생 할 수 있다. 이 문제가 그런데, 이것을 해결하기 위해서 세마포어를 사용해야 한다. mutex라는 이진 세마포어를 활용해서 포크를 손에 쥐는 행위를 하는것을 한 시점에 한 사람만 가능하게끔 해주고각 프로세스 별로 세마포어를 또 따로 두어서 최대 2명까지 식사를 하게끔 해주어야 한다.(s[i]..
비동기적으로 생산되는 여러 프로세스들을 동기화 시켜주기 위한 도구로 세마포어를 사용한다. 즉, 어떤 문에 입장할수 있는 인원은 한명인데 여러명이 입구에서 대기를 하는 와중에 통제하는 사람이 한명씩만 입장 시키는 상황이다. 그 역할을 하는게 세마포어이다. 신호등 or 신호기 라는 뜻을 가지고 있다고 한다. 세마포어는 int,char처럼 어떤 한 자료형이고 추상적이다. 세마포어는 down,up이라는 두 연산을 통해서만 값을 변경할 수 있다. 세마포어는 커널에 저장된 변수이며, 시스템콜(down,up)을 통해서만 값을 수정할수있다. down-> 세마포어 값이 0이면 프로세스를 블락시킨다(잠들게 한다)-> 그렇지 않으면 값만 감소시키고 하던일 그대로 진행시킨다.up-> 블락된 프로세스가 있다면 그 프로세스를 깨..
생산자가 유한한 용량을 가진 버퍼에 아이템을 생산해서 가져다 놓고 소비자는 그 아이템을 소비한다고 가정하자. 1. 소비자가 if(count==0)을 실행하자마자 스케쥴링이 일어나서 생산자가 cpu사용권을 획득했다.2.생산자는 아이템을 생산하고 공유변수인 count를1증가시킨후에 자고 있지도 않은 소비자를 깨운다.3. 아무일도 일어나지 않은 상태로 다시 스케쥴링이 일어나서 소비자가 sleep()을 실행해서 잠에 든다.4. 그리고 다시 스케쥴링이 일어나서 생산자 프로세스가 실행되면 생산자는 count값이 2부터 시작해서 계속 증가하게 된다.5. 생산자는 버퍼가 꽉찰때까지 (N이 100이 될때까지) 계속 생산하다가 count == N을 만족해서 잠이든다.6. 결국에는 생산자 소비자가 둘다 잠에 든다는 문제가 ..
- Total
- Today
- Yesterday
- async
- atomic design
- es6
- type alias
- server side rendering
- Babel
- react hooks
- reducer
- design system
- storybook
- Action
- webpack
- props
- reactdom
- mobx
- useRef
- Polyfill
- state
- return type
- hydrate
- typescript
- promise
- await
- computed
- useEffect
- reflow
- react
- Next.js
- rendering scope
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |