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

메모리 관리 프로그램이 실행되면 독자적인 주소공간이 생성된다. 논리 주소 = 가상 주소 각 프로세스마다 0번지부터 시작 물리적 주소 symbolic address 프로그래머가 코딩을 할 때, 숫자로 된 주소를 사용하지 않고 symbol로 된 주소를 사용한다. 컴파일이 되면서 숫자로 된 주소가 만들어진다. 컴파일 타임 바인딩 주소 변환이 컴파일할 때 이루어짐. 컴파일을 새로 하면 주소가 바뀜 absolute code load time binding 실행이 시작될 때 주소 변환이 이루어짐. relocatable code 비어있는 위치는 실행 시에 어느 위치든지 올라갈 수 있다. execution time binding = run time binding 프로그램이 시작된 이후에도 시작하다가 중간에 물리적인 메..

sequence P1이 가용 자원을 사용하여 작업을 마치고 자원을 반납하게 되면 P3를 처리할 수 있게 된다. 이런 식으로 sequence가 존재하면 그 시스템은 safe state라고 한다. deadlock이 생기지 않는 상태이다. 그러나 굉장히 비효율적이다. 사실 deadlock은 거의 안 생긴다.! Deadlock avoidance는 항상 safe state를 유지한다. safe 하다는 의미는 현재 남아있는 자원만 가지고도 충분히 프로세스를 끝낼 수 있다는 의미. safe 상태에서 가용 자원만으로 충족되지 않은 자원을 줬다고 해서 문제가 되는가? 여기서 말한 충족의 의미는 Need

Deadlock : 각자 일부 자원을 가지고 있고 자원을 주지 않으면서, 상대방의 자원을 요구하는 경우 Deadlock 문제 example 1) 프로세스가 하려는 일 : 하나의 테이프 드라이버에서 읽어서 다른 테이프 드라이버로 copy 하는 것.(하드웨어 자원을 기다리면서 deadlock이 생긴 일.) 두 프로세스가 각각 테이프 2개를 점유해야 작업이 가능하다. 상대방의 자원을 요구하면 deadlock 발생 example 2) 2개의 프로세스가 lock을 거는 semaphore를 획득해서 일을 하고 싶어 함.(소프트웨어 자원을 기다리면서 deadlock 발생) 프로세스 0 : A를 먼저 획득한 다음에 B를 획득하려는 상황에서 cpu를 빼앗김 프로세스 1 : B를 먼저 획득한 다음에 A를 획득하려는데, 이..

프로세스 동기화 (process synchronization) = 병행 제어( concurrency control) 모니터의 역할 active 한 프로세스가 하나만 모니터 안에 있는 코드를 실행할 수 있게 한다. 프로그래머는 공유 데이터를 접근할 때, lock을 신경 쓸 필요가 없어진다. 예시 A 프로세스가 모니터 안에 와서 공유 데이터를 접근하는 코드를 실행하고 있을 때, cpu를 빼앗겼다. B 프로세스가 모니터를 접근하는 코드를 들어오려고 한다. 그러나 A 프로세스는 active 한 상태로 모니터에 남아있다. 그래서 B 프로세스는 모니터안에 있는 코드를 실행시키지 못한다. 모니터 밖에 있는 큐에서 기다리게 된다. 그러면 언제 모니터 내부에 들어올 수 있는가? 1. 모니터 안에 있는 active 한 프..

주황색이 데이터가 들어있는 버퍼 mutual exclusion : 상호 배제 Shared data lock을 걸고, 풀고 해서 접근을 해야 한다. Synchromization variable binary semaphore ex) mutex = 1 ---> lock을 거는 semaphore 변수 integer semaphore ex) empty = n, full = 0 p : 자원을 획득, v : 자원 반납 write : 동시에 하면 안 됨. 아무도 없을 때만 배타적으로 해야 함. read : 동시에 해도 됨. 공유 데이터를 접근할 때는 lock을 걸어서 다른 프로세스의 접근을 막고 작업을 한 뒤에 lock을 풀어야 한다. 읽을 때도 lock을 걸어야 함. writer 가 접근할 수 있기 때문이다. rea..

추상 자료형 : 논리적으로만 정의할 뿐, 컴퓨터에서 어떻게 구현되는 것과는 별개이다. 세마포어를 사용하는 이유 : 공유 자원을 획득하고 반납하는 것을 처리한다. 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도 커널에 있는 코드이다. 해결책 : ..