ROM: 메모리의 전원이 나가도 내용이 유지되는 소량의 부분, 전원이 켜지면 CPU가 ROM의 주소를 가리킴 loader는 하드디스크의 0번 섹터의 내용을 메모리에 올려 실행하라 명령 boot block은 파일 시스템에서 OS 커널의 위치를 찾아 메모리에 올려 실행하라 명령 N-SCAN으로 SCAN보다 대기시간을 조금 더 균일하게 함 여러 요청을 한꺼번에 묶어서 처리(merge)하여 효율성을 높이기도 함 프로세스 종료 시 필요없는 내용이기 때문에 공간보다는 속도 효율성이 더 중요 seek time 줄이는 것이 주요하므로 파일 시스템보다 훨씬 큰 단위의 데이터를 처리한다 parity: 오류를 생겼는지 알 수 있고 복구할 수 있을 정도의 중복저장만 간략하게 해주는 기법 출처: https://core.ewha..
메모리에 매핑하면 운영체제 관여 없이 메모리 접근 연산만으로 파일 입출력과 같은 효과를 낸다 물리 메모리에 올라와있지 않으면 마찬가지로 page fault 발생해 OS로 CPU 제어권이 넘어간다 unified buffer cache 일 때 물리 메모리에 매핑된 페이지가 올라오면 시스템콜 없이 직접 파일에 접근 가능 물리 메모리에 매핑된 데이터가 스왑될때는 swap area가 아닌 파일 시스템에 변경된 사항을 반영한 후 삭제된다 가상 메모리의 code 부분도 읽기만 가능하므로 실행파일에 온전히 존재하여 swap area로 가지 않고 삭제된다 다른 프로세스가 같은 데이터 파일을 매핑하면 물리 메모리에서 같은 주소를 공유하며 접근한다 일관성 문제에 유의해야 함 B가 데이터 파일을 매핑하여 물리 메모리에 올라가..
직접 접근이 가능한 매체(예: 디스크)라도 데이터를 관리 방식에 따라 순차 접근만 허용되는 경우도 있다 파일들을 디스크에 연속적으로 저장 공간 효율보다는 시간 효율이 중요한 상황에서 사용하면 좋다 (realtime, swapping) 파일의 부분들을 디스크의 남는 자리에 저장하고, 각 부분에는 다음 부분의 위치를 가리키는 포인터가 있음 index block을 별도로 두어서 각 파일 부분의 위치정보를 순서대로 담고 있다 index block을 여러개 연결하거나, 계층을 두어 큰 파일도 처리 가능 -> 공간 효율 ↓ boot block: 어떤 파일 시스템이든 맨 처음에 위치, 커널의 위치를 찾아 부팅할 수 있게 하는 역할 super block: 디스크의 빈 block 정보, 할당된 block 정보, inod..
메모리(주소로 접근), 파일(이름으로 접근) reposition: 파일 내 포인터를 그 파일의 다른 곳으로 옮기는 것 (계속 연속적으로만 읽지 않을 수 있음) open root의 metadata 위치는 이미 알고 있어서 메모리에 올려놓고 root 파일에 있는 a의 metadata를 메모리에 올림 디렉토리 파일인 a의 metadata 정보로 a의 저장 위치로 접근해 그 안에 있는 b의 metadata를 메모리에 올림 read b의 저장 위치로 접근해 요청한 만큼의 데이터를 OS영역의 버퍼 캐시 공간에 저장 버퍼 캐시에 있는 데이터의 복사본을 사용자 메모리 영역에 저장 요청한 데이터가 버퍼 캐시에 존재하는 경우 CPU 판단 하에 디스크를 경유하지 않고 바로 복사하여 전달 A의 PCB에 파일 b의 metada..
TLB도 캐시 메모리의 일종 CPU가 요청한 페이지가 이미 물리 메모리에 있다면 접근과정(주소변환)에서 OS의 역할은 없다 page fault가 생겨 OS가 제어권을 가질때만 관여하므로 LRU, LFU 모두 사용 불가(참조시각, 참조빈도 모름) 하드웨어적으로 물리 메모리에서 바로 참조한 페이지는 page table의 reference bit을 1로 설정 replacement 상황 시 OS가 bit=1인 페이지는 0으로 바꾸고 다음으로 이동하면서 최초로 bit=0인 페이지 교체 modified bit 사용하여 CPU가 write로 접근한 페이지에 대한 처리 가능하게 함(변경사항 반영하여 디스크에 저장) 가급적 modified bit도 0인 것을 우선적으로 교체 메모리의 각 페이지가 어떤 프로세스의 것인지도..
OS가 관리하는 부분을 배운다 지금 필요하지 않는 페이지는 disk(swap area)에 저장 CPU가 요청한 페이지가 물리 메모리에 없다면 page fault -> 디스크에서 불러오는 I/O 작업 필요 현대 시스템은 page fault 비율이 0.1 이하 정도로 낮다 디스크에서 페이지를 불러올 때 물리 메모리에 자리가 없다면 page fault가 최대한 덜 나타나도록 자리를 만든다 reference string: 페이지에 번호를 매겨 참조된 순서대로 기록한 것 victim이 수정되었다면 반영하여 backing store에 저장, 아니라면 그냥 삭제 미래에 참조될 페이지를 안다고 가정하는 알고리즘 -> offline -> 비현실적인 최대 효율 알고리즘 LRU는 연결 리스트로 구현하여 맨 위 페이지 추출하..
일반적으로 segment 개수가 훨씬 적기 때문에 테이블이 차지하는 용량이 비교적 매우 적다 shared segment: code, private segment: data segment로 나눈후 각 segment를 다시 page로 나누는 기법 -> 물리 메모리에는 page 단위로 올라감(hole 없음) 공유와 보안은 segment 차원에서 처리하여 두 방법의 장점을 모두 가지고 있다 지금까지 배운 주소변환 과정에서 운영체제의 역할은 없었다 (모두 하드웨어의 도움) CPU가 주소변환을 통해 메모리에 접근할 때마다 OS에 넘어갔다가 다시 사용자 프로세스에 넘어오지 않는다 I/O 접근을 할 때 역할이 있다 출처: https://core.ewha.ac.kr/publicview/C010102014050914293..
다단계 페이지 테이블을 사용해도 TLB 사용 비율이 높다면 오버헤드가 그렇게 크지 않다 page table은 주소 공간의 전체 용량만큼의 엔트리가 생성되므로, 페이지 개수가 부족한 프로세스도 있다 각 페이지가 code, data, stack 중 일부를 가지고 있는데, 어떤 연산 권한을 가지고 있는지 알려준다 예: code부분은 바뀌면 안되기 때문에 read-only, data/stack은 읽고 쓰기 다 가능 해당 프로세스의 논리 주소가 page table의 몇번째 엔트리에 있는지 확인 후 물리 메모리에도 같은 인덱스로 접근 공간 효율을 높이기 위한 방법이지만 시간 오버헤드가 매우 크다 associative register: 순차적인 탐색이 아닌 동시에 모든 엔트리 탐색 예: 동일한 워드 프로그램 3개 실..
프로세스마다 page table을 가지고 있다 인덱스로 접근하면 물리 주소를 바로 알 수 있다 (table = array) 32 bit로 2^32 byte의 주소 공간을 처리할 수 있고, 이는 4kb 크기의 page를 1M개 담고 있다 메모리는 byte 단위로 주소가 매겨진다 4kb의 page들은 각각 4byte의 엔트리를 1k개 보유하고 있다 사용되지 않는 주소 공간이 많아 만들어지지 않는 inner page table이 많으므로 공간을 더 효율적으로 사용 1계층 테이블은 모든 페이지에 대한 정보가 모두 들어가고 물리 메모리에 저장되므로 비효율적 d: 4kb = 2^12byte = 12bit p2: 1kb = 2^10byte = 10bit p1: 32bit - (12bit + 10bit) = 10bit..
프로세스 최초 실행 시 논리 주소 생성되고 필요한 부분만 실제 물리 주소에 올라가서 실행된다 물리 메모리의 어떤 주소에 올라갈지 결정하는 주소 바인딩 과정이 필요하다 프로그래머 입장에서는 심볼로 된 주소를 사용하고 컴파일되면 숫자 주소로 바뀐다 실행파일의 인스트럭션이 가리키는 주소는 논리 주소이기 때문에 CPU도 논리 주소를 참조한다 따라서 CPU가 요청하는 논리 주소에 대응되는 물리 메모리의 주소를 매번 제공받아야 한다(주소 변환) relocation register(base register): 물리 메모리 주소의 시작지점 저장 -> 요청받은 논리 주소에 이 값을 더해 변환 limit register: 해당 프로세스의 최대 주소 번지 저장 -> 악성 프로세스 필터링(다른 프로그램 침범 방지) 현대의 메..