일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 10026번
- C++
- 스프링 핵심 원리
- 에러핸들링
- Operating System
- Four Squares
- n타일링2
- OS
- 스프링 입문
- Operating System.
- 제프리리처
- 김영한
- redis
- FIFO paging
- 운영체제
- Spring
- TCP/IP
- inflearn
- 열혈 TCP/IP 소켓 프로그래밍
- 토마토
- 2475번
- 이펙티브코틀린
- 우아한레디스
- C#
- Window-Via-c/c++
- 열혈 tcp/ip 프로그래밍
- HTTP
- BOJ
- 우아한 테크 세미나
- 윤성우 저자
- Today
- Total
목록Computer Science/운영체제 (24)
나의 브을로오그으

- Demand Paging * 요구되어지는 페이지만 backing store에서 가져온다. * 프로그램 실행 계속에 따라 요구 페이지가 늘어나고, 언젠가는 메모리가 가득 차게 된다. - Memory full * 메모리가 가득 차면 추가로 페이지를 가져오기 위해 어떤 페이지는 backing store로 몰아내고 (page-out) * 그 빈공간으로 페이지를 가져온다 (page-in) * 용어 : victim page (기왕이면 modify되지 않는 것) - Victim Page - 어떤 페이지를 몰아낼 것인가? * 시간 절약을 위해 기왕이면 modify되지 않은 페이지를 victim으로 선택 (이때 페이지 별로 modified bit를 두어 수정 여부를 체크 = dirty bit) - Page refer..

유효 접근 시간 - Effective Access Time * p: probability of a page fault = page fault rate * T(ef) = (1 - p)T(m) + pT(p) (여기서 사실 Tm + Tb로 페이지 테이블을 읽는데 걸리는 시간도 계산해야 하지만, 그 시간은 굉장히 작기 때문에 무시하고 계산했음 : T(m) 메모리 읽는데 걸리는 시간 T(p) 페이지 결함(부재)가 걸려서 처리되는 시간 전기신호를 통해 Page fault발생 시 CPU에 인터럽트 발생 -> OS내부 ISR 실행 -> 하드디스크에서 해당 페이지를 메모리로 로드 바로 이 하드디스크에서 해당 페이지를 찾는데(read) 걸리는 시간이 오래 걸린다.) - 예제 * T(m) = 200nsec (DRAM) * ..

- 외부 단편화 (External Fragmentation) * 세그먼트 크기는 고정이 아니라 가변적 * 크기가 다른 각 세그멘트를 메모리에 두려면 = 동적 메모리 할당 * First-, Best-, Worst-fit, compaction 등 문제 - 세그멘테이션 + 페이징 * 세그멘테이션은 보호와 공유면에서 효과적 * 페이징은 외부 단편화 문제를 해결 * 따라서 세그멘트를 페이징하자! - Paged Segmentation (페이징은 보호와 공유 측면에서 문제가 있고, 세그멘트는 외부 단편화 문제가 있다 그래서 각 문제를 보완 할 수 있도록 두개를 조합하여 사용한다.) 예) Intel 80x86 방법) 프로세스를 세그멘트 단위로 자른 후에 각 세그멘트를 페이지 단위로 자른다. 좋은 방법일까??? 단점도 ..

보호와 공유 - 보호 (Protection): 해킹 등 방지 * 모든 주소는 페이지 테이블을 경유하므로, * 페이지 테이블 엔트리마다 r, w, x 비트 두어 * 해당 페이지에 대한 접근 제어 가능 - 공유 (Sharing): 메모리 낭비 방지 * 같은 프로그램을 쓰는 복수 개의 프로세스가 있다면, * code + data + stack 에서 code 는 공유 가능 (단, non-self-modifying code = reentrant code = pure code인 경우) * 프로세스의 페이지 테이블 코드 영역이 같은 곳을 가리키게 * 페이징보다 우월 세그멘테이션(Segmentation) - 프로세스를 논리적 내용 (=세그멘트)으로 잘라서 메모리에 배치 * 프로세스는 세그멘트(segment)의 집합 *..

주소 변환(Address Translation) - 예제 * Page size = 4bytes * Page Table: 5 6 1 2 * 논리주소 13번지는 물리주소 몇 번지? Page Number Frame Number 0 5 1 6 2 1 3 2 13 = 1101(2) d(displacement) = 01(2) = 1 p(page number) = 11(2) = 3, frame number = 2 = 10(2) Page Size = 4bytes 이므로, d는 하위 2비트이다. logical address => physical address 변환 1101(2) => 1001(2) = 9 답 : 9번지 - 예제 * Page Size = 1KB * Page Table = 1 2 5 4 8 3 0 6 * 논..

연속 메모리 할당 - 다중 프로그래밍 환경 * 부팅 직후 메모리 상태: O/S + big single hole * 프로세스 생성 & 종료 반복 -> scattered holes (비어있는 메모리 영역을 hole이라고 표현한다. 초기 booting 시에는 OS를 제외한 큰 하나의 hole만 존재한다. 그러나 여러 프로세스가 올라가면서 작은 hole들이 여러개 생기게 되는데 이 흩어져있는 작은 hole들이 여러개 생기는 현상을 메모리 단편화(memory fragmentation)라고 한다.) - 메모리 단편화 (Memory fragmentation) * Hole 들이 불연속하게 흩어져 있기 때문에 프로세스 적재 불가 * 외부 단편화 (external fragmentation) 발생 * 외부 단편화를 최소화 ..

프로그램을 메모리에 올리기 - 실행파일을 메모리에 올리기 * 메모리 몇 번지에? * 다중 프로그래밍 환경에서는? - MMU 사용 * 재배치 레지스터 (Relocation Register) - 주소 구분 * 논리 주소 (logical address) vs 물리 주소 (physical address) (보통 프로그램 개발 시 컴파일 > 링크 과정을 통해서 실행파일이 생성된다. 실행 파일을 메모리에 올릴때 메모리의 상황에 따라 다른 주소에 적재가 된다. 그러면 CPU는 여러 프로세스에 접근 할 때 각 프로세스가 어디에 적재되어 있는지를 알아야 한다. 그래야 접근이 가능하기 때문이다. 이를 가능하게 해주는 것이 MMU 이다.) CPU가 메모리에 명령어를 읽을 때, 메모리 보호를 목적으로 CPU가 다른 프로세스의..

주기억장치 관리(Main Memory Management) - 메모리 역사 * Core memory * 진공판 메모리 * 트랜지스터 메모리 * 집적회로 메모리: SRAM, DRAM - 메모리 용량 * 1970년대: 8-bit PC 64KB * 1980년대: 16-bit IBM-PC 640KB > 1MB > 4MB * 1990년대: 수MB > 수십 MB * 2000년대~: 수백 MB > 수 GB 언제나 부족한 메모리 - 프로그램 변천 * 기계어/어셈블리어 작성 * C언어 작성 * 자바, 객체지향형 언어 작성 * 숫자 처리 > 문자 처리 > 멀티미디어 처리 > Big Data - 메모리 용량 증가 vs 프로그램 크기 증가 * 언제나 부족한 메모리 - 어떻게 메모리를 효과적으로 사용할 수 있을까? * 메모리 ..

모니터 - 모니터(Monitor) * 세마포어 이후 프로세스 동기화 도구 * 세마포어 보다 고수준 개념 - 구조 * 공유자원 + 공유자원 접근함수 * 2개의 queues; 배타동기 + 조건동기 * 공유자원 접근함수에는 최대 1개의 쓰레드만 진입 * 진입 쓰레드가 조건동기로 블록되면 새 쓰레드 진입가능 * 새 쓰레드는 조건동기로 블록된 쓰레드를 깨울 수 있다. * 깨워진 쓰레드는 현재 쓰레드가 나가면 재진입할 수 있다. - 자바의 모든 객체는 모니터가 될 수 있다. * 배타동기: synchronized 키워드 사용하여 지정 * 조건동기: wait(), notify(), notifyAll() 메소드 사용 class C { private int value, ...; synchronized void f() { ..

- 프로세스는 실행을 위해 여러 자원을 필요로 한다. * CPU, 메모리, 파일, 프린터, ...... * 어떤 자원은 갖고 있으나 다른 자원은 갖지 못할 때 (e.g .. 다른 프로세스가 사용 중) 대기해야 * 다른 프로세스 역시 다른 자원을 가지려고 대기할 때 교착상태 가능성! - 교착상태 필요조건 (Necessary Conditions) * Mutual Exclusion (상호배타) * Hold and wait (보유 및 대기) * No Preemption (비선점) * Circular wait (환형대기) 자원(Resources) - 동일 자원 * 동일 형식 (type) 자원이 여러 개 있을 수 있다. (instance) * 예: 동일 CPU 2개, 동일 프린터 3개 등 - 자원의 사용 * 요청 ..