Fact
- 11일차
Feelings
- 아 너무 어렵다
Findings
cvcs와 dvcs
- cvcs(centralized version control system) dvcs(distributed version control system)
- 제일 큰 차이점은 버전 관리는 서버에서만 한다.
- dvcs에서 로컬 저장소라는 개념이 생긴다. 그래서 나만의 버젼 관리가 가능 하다.
-
cvcs에서는 push를 하게 되면 바로 서버 레포에 간다. 안되는거 올리면 큰일 난다.
- 에러가 뜨게 되면 이제 해결 할때 까지 아무것도 못한다.
- 반면 dcvs는 로컬 레포라는게 있으니 바로 롤백이 가능하다.
- dcvs에서는 나의 레포를 거쳐서 서버/remote 레포에 들어간다.
- 브렌치와 머지 라는 개념도 dcvs에서 나온다.
- 예) cvcs => svn, dvcs => git
[출처1]https://ojava.tistory.com/157
스케쥴링
- scheduler가 호출되는 시기
-
의사결정모드
- Preemptive: 스케줄러가 주기적으로 호출됨 (이중 지향) 또는 시스템 상태가 변경되는 경우
- Nonpreemptive: 프로세스가 종료되거나 프로세스가 종료될 때 스케줄러가 호출됨 블록
-
우선순위가 가장 높은 프로세스를 어떻게 선정하는가?
- 우선순위함수: P = 우선 순위(p)
- 중재규칙 : 관계파악화
- 랜덤
- 연대순(최초 입력 = FIFO)
- 주기적(원형 로빈 = RR)
- 우선순위를 결정하는 다양한 방법
-
우선순위를 정의하는 데 사용되는 프로세스의 가능한 속성:
- 달성된 서비스 시간(a): 할당된 CPU 시간
- 시스템에서의 실시간 (r): 도달시간 + 대기시간
- 총 서비스 시간(t): 도착과 출발 사이의 총 시간
- 주기성(d): 연산 반복
- 기한(주기에 의해 명시되거나 암시됨): 실시간 포인트 어떤 과정을 완료해야 하는가에 따라
- 외부우선순위(e)
- 메모리 요구사항(대부분 배치의 경우)
- 시스템 부하 (공정별이 아님)
-
First-Come, First-Served (FCFS) Scheduling
- 오는 순서대로 처리 하는 방식
- 우선순위 함수 r (r 은 도착 시간)
- 의사결정 모드: 비선제적
-
Shortest Job First(SJF)
- cpu burst 길이 에 따라 스케쥴링 방식
- 두 가지 체계:
-
nonpreemptive – 일단 프로세스에 CPU를 제공하면 다음과 같을 수 없음 CPU 버스트가 완료될 때까지 사전 예방
- 우선순위 함수 = -총 서비스 시간
-
preemptive – CPU 버스트 길이와 함께 새로운 프로세스가 올 경우 현재 실행 프로세스의 남은 시간으로 스케쥴링.
- 최단-잔여 시간-최초(SRTF) 라고도 알려진다.
- 우선순위 함수 = -(t-a), t = 총 서비스 시간, a = 총 쓴 시간
-
priority
- 우선순위 번호(integer)가 각 프로세스와 연관됨
- CPU가 가장 높은 우선순위로 프로세스에 할당됨 (최대 정수 ≡ 최고 우선순위)
- 선제적
- 비선제적
- SJF는 우선순위 스케줄링이며, 우선순위가 다음 CPU 버스트 시간 로 예측됨
- 문제 ≡ 기아 – 우선순위가 낮은 프로세스는 실행 안될 수 있음
- 해결책 ≡ 고령화 – 시간이 지날수록 우선순위 증가
-
multi-level queue
- ready queue은 별도의 대기열로 분할:
- foreground (interactive)
- background (batch)
- 각 대기열에는 고유의 스케줄링 알고리즘이 있음
- foreground – RR
- background – FCFS
- 대기열 간 스케줄링 수행
- 고정 우선순위 스케줄링 (foreground 다 하고 background 하기 등) 배경에서. 기아 가능성.
- Time Slice – 각 대기열에서 일정량의 CPU 시간을 얻음 프로세스 간에 스케줄링할 수 있는 것, 즉 80% ~ RR의 전경
- FCFS의 20% ~ 백그라운드
멀티 스레드 스케줄링 방식
웹 워커
- JS는 싱글 쓰레드로 동작하지만 웹 워커를 사용하면 브라우저에서 멀티 쓰레드를 쓸 수 있다.
- 긴 계산식이 있으면 싱글 스레드를 쓸 시에 마냥 기달려야 하지만 웹 워커를 쓸 시에 유사 멀티 스레드를 쓰는 마냥 새로운 스레드로 계산 맡기고 메인 스레드는 다른 작업을 수행 할 수 있게끔 할 수 있다.
setTimeout
- 일정 시간이 지난 후에 원하는 함수를 예약 실행(호출)할 수 있게 하는 것을 ‘호출 스케줄링(scheduling a call)‘이라고 한다
function hello() {
alert('Hello');
}
setTimeout(hello, 1000);
// 혹은
setTimeout(()=>hello(), 1000);
setInterval은 settimeout와 달리 계속 실행 된다. clearinterval로 멈출 수 있다.
// 2초 간격으로 메시지를 보여줌
let timerId = setInterval(() => alert('째깍'), 2000);
// 5초 후에 정지
setTimeout(() => { clearInterval(timerId); alert('정지'); }, 5000);
1초 후에 hello() 가 실행 된다
-
실행 방식
- 브라우저의 타이머 스레드가 카운트다운을 시작하고 타임 업이 시작되면 콜백 기능이 자바스크립트 스레드의 실행 스택에 배치된다. 콜백 기능은 스택에서 그 위에 있는 다른 기능이 끝나기 전에 실행되지 않는다. 따라서 시간이 경과할 때 다른 시간 소모적인 기능이 실행될 경우 setTimeout의 콜백은 제시간에 완료되지 않는다.
타이머Timer를 구현하기
- 대신 Date 개체를 사용하여 정확한 현재 시간(밀리초-)을 얻자. 그런 다음 콜백이 얼마나 자주 실행되었는지 계산하는 대신 현재 시간 값에 근거하여 논리를 작성하게 된다.
간단한 타이머 또는 클럭의 경우 시간 차이를 따라감.
let start = Date.now();
setInterval(function() {
let delta = Date.now() - start; // milliseconds elapsed since start
…
output(Math.floor(delta / 1000)); // in seconds
// alternatively just show wall clock time:
output(new Date().toUTCString());
}, 1000); // update about every second
그러나 점프 값의 문제를 가지고 있다. 간격이 약간 지연되어 990, 1993, 2996, 3999, 5002밀리초 후에 콜백을 실행하면 두 번째 카운트 0, 1, 2, 3, 5 (!)가 나타난다. 따라서 이러한 점프를 피하기 위해 약 100ms마다 업데이트하는 것이 바람직하다.
멀티 스레드가 공용 리소스에 접근할 때 임계구역을 다루는 방식
-
두 프로세스가 작동하면 리소스를 동시 다발적으로 접근 할수 있으므로 이로 인해 시스템에 문제를 일으킨다. 그래서 쓰는게 semaphore, mutex 등이다.
- Semaphore
- 공용 리소스에 접근하는 여러 프로세스를 막는 것
- mutex
- 공용 리소스에 접근하는 여러 스레드를 막는 것
- Critical section(임계구역)
- 여러 프로세스가 공용 리소스에 접근하면서 수행될 때 각 프로세스에서 공용 리소스를 액세스하는 프로그램 코드 부분을 가리키는 말.
- 공용 리소스에 여러 프로세스가 동시에 접근하면 잘못된 결과를 만들어 낼 수 있다.
임계점 방식
-
Mutual
- Critical Section을 가진 쓰레드들의 Runnig Time이 서로 겹치지 않게 각각 단독으로 실행
- 여러 프로세스들의 공용 리소스에 대한 접근을 조율하기 위해 locking과 unlocking을 사용한다.
- 다중 쓰레드 사용 불가
-
Semaphore
- 세마포어는 운영체제 또는 커널의 한 지정된 저장장치 내 값으로서, 각 프로세스는 이를 확인하고 변경한다.
- 세마포어의 값에 따라 프로세스 리소스 접근을 허용/비허용. 리소스 접근을 못하면 일정한 시간을 기달렸다가 재시도 한다.
- 세마포어는 보통 0 혹은 1을 사용하나 추가적인 값을 가질수도 있다.
- 사용하는 동안 세마포어의 값을 변경하고 다른 세마포어 사용자들은 대기한다.
뮤텍스는 단일 스레드 사용할때 쓰고 세마포는 다중 프로세스를 쓸대 사용하면 된다.
Future Action
- 책을 많이 봐야 할것 같다.