Skip to content

Commit

Permalink
mod: resize images
Browse files Browse the repository at this point in the history
  • Loading branch information
lja3723 committed Sep 4, 2024
1 parent 7f9c24e commit 99bdc26
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 107 deletions.
6 changes: 3 additions & 3 deletions _posts/Computer-Science/OS/2024-05-08-mutual-exclusion.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ tags: ['OS', '동기화']
- entry code에서 대기중인 스레드가 임계구역에 진입할 수 있도록 entry code에서 취한 조치를 해제하는 코드

{% assign img_path = "/assets/img/posts/OS/2024-05-08-mutual-exclusion" %}
![1.3. 상호 배제를 포함하는 프로그램]({{ img_path }}/1.3. 상호 배제를 포함하는 프로그램.png){: width='650'}
![1.3. 상호 배제를 포함하는 프로그램]({{ img_path }}/1.3. 상호 배제를 포함하는 프로그램.png){: width='500'}


### 1.4. 구현 주의사항
Expand Down Expand Up @@ -80,7 +80,7 @@ tags: ['OS', '동기화']
- **인터럽트를 금지한다** → Scheduling에 의한 context switching도 자연스럽게 금지됨.
- 스레드도 중단되지 않음

![2. 인터럽트 서비스 금지]({{ img_path }}/2. 인터럽트 서비스 금지.png)
![2. 인터럽트 서비스 금지]({{ img_path }}/2. 인터럽트 서비스 금지.png){: width='650'}

- cil: clear interrupt
- stl: set interrupt
Expand Down Expand Up @@ -262,7 +262,7 @@ int main() {
- lock 변수를 이용한 상호배제 실패 원인? entry 코드에 있음
- lock 변수 값 읽는 명령과 lock 변수에 1 저장하는 2개의 명령 사이에 컨텍스트 스위칭 될 때 문제 발생
![3. 인터럽트 서비스 금지 문제점]({{ img_path }}/3. 인터럽트 서비스 금지 문제점.png){: width='500'}
![3. 인터럽트 서비스 금지 문제점]({{ img_path }}/3. 인터럽트 서비스 금지 문제점.png){: width='400'}
_인터럽트 서비스 금지의 본질적 문제점_
### 3.1. 해결책: 원자 명령(atomic instuction) 도입
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@ tags: ['OS', '동기화']
![2. 생산자-소비자 문제]({{ img_path }}/2. 생산자-소비자 문제.png){: width='500'}
_생산자 소비자 문제_

![2. 실행 순서에 따른 결과 차이]({{ img_path }}/2. 실행 순서에 따른 결과 차이.png){: width='500'}
_Caption_
![2. 실행 순서에 따른 결과 차이]({{ img_path }}/2. 실행 순서에 따른 결과 차이.png){: width='400'}
_실행순서에 따른 결과 차이_

### 2.1. 아주 자주 발생하는 문제

- 키보드 입력도 생산자-소비자 관계임
- 가끔씩 입력이 씹히는 것이 곧 생산자-소비자 문제

![2. 생산자-소비자 문제 예]({{ img_path }}/2. 생산자-소비자 문제 예.png){: width='500'}
![2. 생산자-소비자 문제 예]({{ img_path }}/2. 생산자-소비자 문제 예.png){: width='560'}
_생산자-소비자 문제 예_

### 2.2. 생산자-소비자에서 고려해야할 3가지 문제점
Expand Down
6 changes: 3 additions & 3 deletions _posts/Computer-Science/OS/2024-05-13-synchronization-way.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ int main() {
- 세마포어는 동시에 여러 개의 프로세스/스레드가 임계 구역에 접근할 수 있도록 카운터를 가지고 있는 입구!
- → 일정 수가 초과하면 못들어갑니다!

![5. 세마포어]({{ img_path }}/5. 세마포어.png){: width='500'}
![5. 세마포어]({{ img_path }}/5. 세마포어.png){: width='600'}
_세마포어의 개념_

### 5.1. 구성 요소 (counter semaphore)
Expand Down Expand Up @@ -278,7 +278,7 @@ V(S) {
- counter 변수는 사용 가능한 자원의 개수를 나타냄
- 음수이면 대기 중인 스레드의 수를 나타냄

![5.3. 세마포어 통한 자원 관리 예제]({{ img_path }}/5.3. 세마포어 통한 자원 관리 예제.png){: width='500'}
![5.3. 세마포어 통한 자원 관리 예제]({{ img_path }}/5.3. 세마포어 통한 자원 관리 예제.png){: width='550'}
_세마포어 통한 자원 관리 예_

### 5.4. 이진 세마포어: 특수한 경우
Expand Down Expand Up @@ -383,7 +383,7 @@ int main() {
- 일종의 클래스 개념
- c.f., 스마트 포인터
![6. 모니터의 작동 원리]({{ img_path }}/6. 모니터의 작동 원리.png){: width='500'}
![6. 모니터의 작동 원리]({{ img_path }}/6. 모니터의 작동 원리.png){: width='400'}
- 자바로 작성한 모니터 내부 코드
Expand Down
26 changes: 13 additions & 13 deletions _posts/Computer-Science/OS/2024-05-20-deadlock.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ tags: ['OS']
- 포크가 사용 중이면 대기

{% assign img_path = "/assets/img/posts/OS/2024-05-20-deadlock" %}
![2. 식사하는 철학자 문제]({{ img_path }}/2. 식사하는 철학자 문제.png){: width='500'}
![2. 식사하는 철학자 문제]({{ img_path }}/2. 식사하는 철학자 문제.png){: width='450'}

### 2.1. 경우의 수

Expand Down Expand Up @@ -67,8 +67,8 @@ tags: ['OS']
- 포크: 자원
- 스파게티: 프로세스가 처리할 작업

![3. 예시1]({{ img_path }}/3. 예시1.png){: width='500'}
![3. 예시2]({{ img_path }}/3. 예시2.png){: width='500'}
![3. 예시1]({{ img_path }}/3. 예시1.png){: width='600'}
![3. 예시2]({{ img_path }}/3. 예시2.png){: width='600'}

### 3.1. 예시

Expand Down Expand Up @@ -177,7 +177,7 @@ int main() {
- 의외로 자주 발생하는 문제
- 공유변수와 관련하여 코딩이 잘못되면 발생할 수 있음

![4.5. 교착상태 발생시키는 임계구역 코드]({{ img_path }}/4.5. 교착상태 발생시키는 임계구역 코드.png){: width='500'}
![4.5. 교착상태 발생시키는 임계구역 코드]({{ img_path }}/4.5. 교착상태 발생시키는 임계구역 코드.png){: width='450'}

- 교착상태를 직접적으로 막는 시스템은 거의 없음
- 막는데 많은 시간과 공간의 비용이 들기 때문.
Expand All @@ -195,19 +195,19 @@ int main() {
- 할당 간선 : 자원에서 쓰레드로 향하는 화살표. 할당 받은 상태 표시
- 요청 간선 : 쓰레드에서 자원으로 향하는 화살표. 요청 표시

![5. 그래프 요소]({{ img_path }}/5. 그래프 요소.png){: width='500'}
![5. 그래프 요소]({{ img_path }}/5. 그래프 요소.png){: width='200'}

- 자원에 대한 시스템의 상태를 나타내는 방향성 그래프
- 컴퓨터 시스템에 실행 중인 전체 쓰레드와 자원의 개수
- 각 자원의 총 인스턴스 개수와 할당 가능한 인스턴스 개수
- 각 쓰레드가 할당받아 소유하고 있는 자원의 인스턴스 개수
- 각 쓰레드가 실행에 필요한 자원 유형과 인스턴스 개수

![5. 방향성 그래프]({{ img_path }}/5. 방향성 그래프.png){: width='500'}
![5. 방향성 그래프]({{ img_path }}/5. 방향성 그래프.png){: width='200'}

- 자원할당그래프를 통해 교착상태 판단

![5. 자원할당그래프]({{ img_path }}/5. 자원할당그래프.png){: width='500'}
![5. 자원할당그래프]({{ img_path }}/5. 자원할당그래프.png){: width='250'}

![5. 자원할당그래프 예]({{ img_path }}/5. 자원할당그래프 예.png)

Expand Down Expand Up @@ -310,9 +310,9 @@ int main() {

- **기다리지 않게 함**

![8.2. 점유와 대기조건]({{ img_path }}/8.2. 점유와 대기조건.png){: width='500'}
![8.2. 점유와 대기조건]({{ img_path }}/8.2. 점유와 대기조건.png){: width='200'}

![8.2. 점유와 대기조건 2]({{ img_path }}/8.2. 점유와 대기조건 2.png){: width='500'}
![8.2. 점유와 대기조건 2]({{ img_path }}/8.2. 점유와 대기조건 2.png){: width='320'}

- **방법 1**
- 운영체제는 쓰레드 실행 전 필요한 모든 자원을 파악하고 실행시 한 번에 할당
Expand All @@ -329,9 +329,9 @@ int main() {

#### 8.2.2. 환형 대기(Circular Wait) 조건

![8.2. 환형 대기 조건]({{ img_path }}/8.2. 환형 대기 조건.png){: width='500'}
![8.2. 환형 대기 조건]({{ img_path }}/8.2. 환형 대기 조건.png){: width='300'}

![8.2. 환형 대기 조건 부정]({{ img_path }}/8.2. 환형 대기 조건 부정.png){: width='500'}
![8.2. 환형 대기 조건 부정]({{ img_path }}/8.2. 환형 대기 조건 부정.png){: width='220'}

- **환형 대기 제거**

Expand Down Expand Up @@ -362,7 +362,7 @@ int main() {

- Edsger Dijkstra에 의해 개발된 알고리즘

![9.1. banker's 알고리즘]({{ img_path }}/9.1. banker's 알고리즘.png){: width='650'}
![9.1. banker's 알고리즘]({{ img_path }}/9.1. banker's 알고리즘.png)

- 자원 할당 전에 미래에 교착상태가 발생여부를 판단
- 은행에서의 대출 알고리즘(돈을 대출한 사람, 돈을 대출하려고 하는 사람)
Expand Down Expand Up @@ -439,7 +439,7 @@ int main() {
- **체크포인트** : 작업을 하다가 문제가 발생하면 저장된 상태로 돌아오기 위한 표시
- **롤백** : 작업을 하다가 문제가 발생하여 과거의 체크포인트로 되돌아가는 것

![11.1. 체크포인트와 롤백]({{ img_path }}/11.1. 체크포인트와 롤백.png){: width='500'}
![11.1. 체크포인트와 롤백]({{ img_path }}/11.1. 체크포인트와 롤백.png){: width='400'}

- 그래서 **Mission-critical system**에서는 적절한 해결책이 반드시 필요
- 또는 시스템에서는 설계단계에서 자원에 대한 프로세스의 할당 등에 대해 미리 계획하고 운영
12 changes: 6 additions & 6 deletions _posts/Computer-Science/OS/2024-05-27-memory-address.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ tags: ['OS', '메모리']
- **MMU(Memory Management Unit)**

{% assign img_path = "/assets/img/posts/OS/2024-05-27-memory-address" %}
![1.3. address binding]({{ img_path }}/1.3. address binding.png){: width='500'}
![1.3. address binding]({{ img_path }}/1.3. address binding.png){: width='550'}



Expand All @@ -54,7 +54,7 @@ tags: ['OS', '메모리']
- 인텔이나 AMD의 x86 CPU는 80286부터 MMU를 내장함
- MMU 덕분으로, 여러 프로세스가 하나의 메모리에서 실행되도록 되었음

![2. MMU 1]({{ img_path }}/2. MMU 1.png){: width='500'}
![2. MMU 1]({{ img_path }}/2. MMU 1.png){: width='350'}

![2. MMU 2]({{ img_path }}/2. MMU 2.png)

Expand All @@ -73,7 +73,7 @@ tags: ['OS', '메모리']
| 주소 시작 | 물리 주소 0번지부터 시작 | 물리주소와 관계 없이 항상 0번지부터 시작 |
| 주소 공간 | 물리 주소(실제 주소) 공간 | 논리 주소 공간 |

![2.1 상대주소 절대주소 1]({{ img_path }}/2.1 상대주소 절대주소 1.png){: width='500'}
![2.1 상대주소 절대주소 1]({{ img_path }}/2.1 상대주소 절대주소 1.png){: width='550'}



Expand Down Expand Up @@ -102,7 +102,7 @@ tags: ['OS', '메모리']
- 한정된 메모리에서 메모리보다 큰 프로그램 실행 가능
- 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능

![4. 메모리 오버레이]({{ img_path }}/4. 메모리 오버레이.png){: width='500'}
![4. 메모리 오버레이]({{ img_path }}/4. 메모리 오버레이.png){: width='450'}

### 4.1. Swap

Expand All @@ -118,7 +118,7 @@ tags: ['OS', '메모리']
- pagefile.sys, swapfile.sys 등 파일로 저장함
- 리눅스에서는 스**왑파티션**이라고 표현함

![4.1. swap]({{ img_path }}/4.1. swap.png){: width='500'}
![4.1. swap]({{ img_path }}/4.1. swap.png){: width='450'}



Expand All @@ -129,7 +129,7 @@ tags: ['OS', '메모리']
- 프로세스의 논리적 주소 공간을 정의하는 **Base register****Limit register**를 사용하여 접근 보호 기능
- 이들을 벗어나는 주소 공간을 접근하면 에러 발생

![5. 메모리 보호 기법]({{ img_path }}/5. 메모리 보호 기법.png){: width='500'}
![5. 메모리 보호 기법]({{ img_path }}/5. 메모리 보호 기법.png)

### 5.1. ASLR

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ tags: ['OS', '메모리']

### 1.1. 메모리 할당 기법

![1.1. 메모리 할당 기법]({{ img_path }}/1.1. 메모리 할당 기법.png){: width='500'}
![1.1. 메모리 할당 기법]({{ img_path }}/1.1. 메모리 할당 기법.png)

#### 1.1.1. 연속 vs 불연속: Process partitioning

Expand Down Expand Up @@ -52,23 +52,23 @@ tags: ['OS', '메모리']
- MFT(Multiple Programming with a Fixed Number of Tasks)
- 메모리 전체를 고정 크기의 n개로 분할. 프로세스마다 하나씩 할당. 수용가능 프로세스의 수 n 고정

![2.1. 고정 크기 할당 0]({{ img_path }}/2.1. 고정 크기 할당 0.png){: width='500'}
![2.1. 고정 크기 할당 0]({{ img_path }}/2.1. 고정 크기 할당 0.png)

- 내부 단편화 발생(외부 단편화일 수도 있음 밑에 내용으로 확실히 하자)

![2.1. 고정 크기 할당]({{ img_path }}/2.1. 고정 크기 할당.png){: width='500'}
![2.1. 고정 크기 할당]({{ img_path }}/2.1. 고정 크기 할당.png){: width='350'}

### 2.2. 가변 크기(variable size partition) 할당

- MVT(Multiple Programming with a Variable Number of Tasks)
- 프로세스마다 가변 크기로 연속된 메모리 할당. **수용가능 프로세스 수 가변**
- 메모리가 없을 때, 프로세스는 큐에서 대기연속 메모리 할당은 초기 운영체제에서 사용

![2.1. 가변 크기 할당 0]({{ img_path }}/2.1. 가변 크기 할당 0.png){: width='500'}
- 외부 단편화 발생(내부 단편화일 수도 있음 밑에 내용으로 확실히 하자)
![2.1. 가변 크기 할당 0]({{ img_path }}/2.1. 가변 크기 할당 0.png)

- 외부 단편화 발생(내부 단편화일 수도 있음 밑에 내용으로 확실히 하자)

![2.2. 가변 크기 할당]({{ img_path }}/2.2. 가변 크기 할당.png){: width='500'}
![2.2. 가변 크기 할당]({{ img_path }}/2.2. 가변 크기 할당.png){: width='350'}

### 2.3. 연속 메모리 할당 구현

Expand All @@ -89,11 +89,11 @@ tags: ['OS', '메모리']
- 메모리 할당의 유연성이 떨어짐.
- 외부 단편화

![2.3. 연속 메모리 할당 구현]({{ img_path }}/2.3. 연속 메모리 할당 구현.png){: width='500'}
![2.3. 연속 메모리 할당 구현]({{ img_path }}/2.3. 연속 메모리 할당 구현.png)

### 2.4. 메모리 배치 기법

![2.4. 메모리 배치 기법]({{ img_path }}/2.4. 메모리 배치 기법.png){: width='500'}
![2.4. 메모리 배치 기법]({{ img_path }}/2.4. 메모리 배치 기법.png)

- **홀 선택 알고리즘/동적 메모리 할당**
- 운영체제는 할당 리스트(allocation list) 유지
Expand Down Expand Up @@ -143,9 +143,9 @@ tags: ['OS', '메모리']
- 조각난 공간
- 합치면 분명히 용량이 있지만, 조각나서 못쓰는 공간들

![2.5. 단편화]({{ img_path }}/2.5. 단편화.png){: width='500'}
![2.5. 단편화]({{ img_path }}/2.5. 단편화.png){: width='300'}

![2.5. 단편화 예]({{ img_path }}/2.5. 단편화 예.png){: width='500'}
![2.5. 단편화 예]({{ img_path }}/2.5. 단편화 예.png)



Expand All @@ -160,14 +160,14 @@ tags: ['OS', '메모리']
- 홀이 프로세스의 크기(요구되는 메모리 량)보다 작으면 할당할 수 없음
- MVT(Multiple Programming with a Variable Number of Tasks)의 경우

![3. 외부 단편화]({{ img_path }}/3. 외부 단편화.png){: width='500'}
![3. 외부 단편화]({{ img_path }}/3. 외부 단편화.png)

- **내부 단편화(internal fragmentation)**
- 할당된 메모리 내부에 사용할 수 없는 홀이 생기는 현상
- 파티션보다 작은 프로세스(요구되는 메모리)를 할당하는 경우 발생
- MFT(Multiple Programming with a Fixed Number of Tasks)의 경우

![3. 내부 단편화]({{ img_path }}/3. 내부 단편화.png){: width='500'}
![3. 내부 단편화]({{ img_path }}/3. 내부 단편화.png)

### 3.1. 계산해보기

Expand All @@ -188,7 +188,7 @@ tags: ['OS', '메모리']
- 작업을 다 마친 후 프로세스 다시 시작
- 굉장히 비싼 작업...!

![3.2. 조각모음]({{ img_path }}/3.2. 조각모음.png){: width='500'}
![3.2. 조각모음]({{ img_path }}/3.2. 조각모음.png){: width='300'}

### 3.3. Buddy System

Expand All @@ -212,9 +212,9 @@ tags: ['OS', '메모리']

## 4. 분할 메모리 할당

![4. 분할 할당 - 세그먼테이션]({{ img_path }}/4. 분할 할당 - 세그먼테이션.png){: width='500'}
![4. 분할 할당 - 세그먼테이션]({{ img_path }}/4. 분할 할당 - 세그먼테이션.png){: width='350'}

![4. 분할 할당 - 페이징]({{ img_path }}/4. 분할 할당 - 페이징.png){: width='500'}
![4. 분할 할당 - 페이징]({{ img_path }}/4. 분할 할당 - 페이징.png){: width='350'}

- 분할된 크기는 20KB이므로 40KB인 프로세스 A는 프로세스 A1과 A2로 나뉘어 할당
- 30KB인 프로세스 C는 프로세스 C1과 C2로 나뉘는데, 메모리에 남은 공간이 없으므로 프로세스 C2는 스왑 영역으로 옮겨짐
Expand Down
Loading

0 comments on commit 99bdc26

Please sign in to comment.