일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MariaDB
- VDI
- 리눅스
- mysql
- Bitnami
- kali
- Web shell
- Error
- 네트워크
- nomaltic place
- kali linux
- 보안
- Virtual Box
- Vitual Disk Image
- Linux
- Bandit
- virtualbox
- 리눅스 기초
- Normaltic
- 노말틱
- 칼리
- 칼리 리눅스
- nomaltic
- shell
- 기초
- Today
- Total
목록cs (30)
게으른 개발자

추상 자료형 : 논리적으로만 정의할 뿐, 컴퓨터에서 어떻게 구현되는 것과는 별개이다. 세마포어를 사용하는 이유 : 공유 자원을 획득하고 반납하는 것을 처리한다. p 연산 : 세마포어 값을 획득하는 연산 v 연산 : 자원을 반납하는 연산 lock을 걸고, 푸는 과정은 세마포어 변수값이 1인 경우이다. 변수자원의 개수가 1개니까. p 연산 : lock 걸기 v 연산 : lock 풀기 p, v는 atomic 연산 한다고 가정한다. 여기서도 busy-wait 문제가 발생한다. sleep : lock을 못 얻으면 cpu를 쓰는 게 아니라. 잠든다. => blocked 하면 cpu를 반납하고 잠에 빠진다. 세마포어 때문에 잠들어 있는 프로세스를 연결하기 위한 Queue 가 만들어짐. 세마 포어를 얻을 수 없으면 b..

어떤 프로세스를 공유 데이터를 접근하거나 접근하지 않거나 entry section에서 lock을 걸고, exit section에서 lock을 푼다. Mutual Exclusion (상호 배제) ---> 파란색 코드 부분 (entry, exit section) Progress(진행) Bounded Waiting(유한 대기) lock을 잘 걸었다가 푸는 방법에 대해 -> 이런 문제가 생기는 이유 -> critical section에 들어갔다가 나가는 것을 cpu를 빼앗기지 않고 한 번에 해결하면 문제가 되지 않음. -> 그러나 cpu에서 단일 instruction이 끝나면 cpu를 빼앗길 수 있다. -> 그런데 우리가 쓰는 고급언어(c언어, 자바..)가 단일 instruction이 아니기 때문에 위에 노란색..

여러 주체가 하나의 데이터를 접근할 때=> race condition (경쟁 상태) cpu가 여러 개가 있을 때, 공유 메모리를 사용할 때 race condition 가능성 있다. 커널 데이터를 접근할 때도 race condition이 발생한다. Count++ 하는 과정 Count 값을 cpu 안에 있는 register로 불러들인다. register 값을 1 증가 register 값을 Count 변수에 같다가 쓴다.(저장) 커널 모드에서 연산이 실행 중일 때는 해당 작업이 끝날 때까지는 interrupt 처리를 안 한다.(disable) 작업 끝난 다음에 인터럽트 처리 루틴으로 넘겨서 race condition이 발생하지 않도록 한다. interrupt handler도 커널에 있는 코드이다. 해결책 : ..

라운드 로빈 Fixed priority scheduling foreground 일을 전부 처리 후에 background 일을 처리함 그러나 starvation 가 발생할 수 있다. 처음 들어오는 프로세스는 우선순위가 가장 높은 큐에 집어넣음. 그러나 time quantum이 짧음 할당 시간내 다 못 끝내면 아래 단계의 우선순위로 강등이 된다. quantum = 8 ---> quantum = 16 -----> FCFS 큐간의 우선순위에서 위에 순위의 큐가 비었을 때만 밑에 순위 큐를 처리한다. 이 방식은 cpu 사용시간이 짧은 프로세스에게 우선순위를 많이 주는 방식이다. homogeneous processor 만약에 특정 프로세서(cpu)에서 수행되어야 하는 프로세스(프로그램)가 있는 경우 경우에는 문제가..

현대적인 cpu 스케줄링은 preemptive - 선점형 스케줄링을 거의 대부분 사용 중이다. 시스템 입장에서 성능척도 이용률 전체 시간에서 cpu가 놀지 않고 일한 시간 처리량 주어진 시간 동안에 몇 개의 작업을 완료한 양 프로세스 입장에서 성능척도 소요시간 cpu를 사용을 시작하고 사용을 끝낸시간 -> 걸린 시간 대기시간 순수하게 기다린 시간을 의미한다. 응답시간 처음으로 cpu를 얻기까지 걸린 시간 ex) 중국집을 예시로 첫 번째 음식이 나오는 데 걸리는 시간. FCFS는 비선점형 방식이다. 그러나 효율적이지는 않다. 너무 오래 기다리는 경우가 있기 때문에 좋은 스케줄링 방법이 아니다. ===> Convoy effect FCFS는 짧은 프로세스가 올 경우에 위와 다른 결과가 나온다. 평균 대기 시간..

CPU burst : cpu를 사용하고 있는 상태 I/O burst : I/O를 하고있는 상태 cpu 스케줄링이 필요한 이유 : interactive한 job을 처리하기 위해 -> 사용자가 답답하지 않도록 cpu scheduler, dispatcher 는 운영체제 안에 코드가 들어있다.

부모 프로세스의 code, data, stack, pc , 등등을 그대로 복사해서 자식 프로세스를 만듦 원칙적으로는 부모 프로세스와 자식 프로세스는 서로 경쟁하면서 자원을 서로 많이 차지하려고 함. Copy-on-write(COW) 리눅스나 효율적인 운영체제에서는 일단 자식이 부모의 공간을 공유하고 있다. 그러나 자식이 write가 발생한다면 그때 copy를 한다.( 내용이 수정이 될 때, 부모의 code, data, stack을 카피한다. ) 그러나 부모의 모든 걸 copy 하는 게 아니다. -> 원래 프로세스는 메모리에서 실행될 때, 모든 부분을 메모리 영역에 올려두고 작업하지 않는다. 따라서 잘게 쪼개서 물리적인 메모리에 올린다. -> 그 쪼개져서 올려진 메모리 부분에서 write가 발생한다면 그 ..

자원을 공유하는 모델보다는 공유하지 않는 게 일반적이다. 부모 프로세스가 자식 프로세스를 생성한다. 1. 부모 프로세스를 복제 -> fork() 2. 새로운 프로그램을 덮어씌움. -> exec() fork, exec -> 시스템 콜이다. 자식 프로세스가 먼저 종료되고, 그다음에 부모 프로세스가 종료됨. 부모 프로세스가 종료될 때, 자식 프로세스를 종료하고 부모 프로세스가 종료된다. - 자식 프로세스가 많은 자원을 사용할 경우에도 부모 프로세스는 자식 프로세스를 종료시킨다.