운영체제(OS)/keyword 27

(Project3-Virtual Memory) 파일-기반 페이지(File-backed page)

파일 백드 페이지는 주기억장치(RAM)에 적재된 페이지가 특정 파일과 관련되어 있음을 나타내는 페이지로, 파일의 내용이 메모리에 로딩되어 있는 상태를 의미한다. 파일 백드 페이지의 활용 파일 매핑: 파일 매핑은 파일의 내용을 주기억장치에 매핑하여 파일의 일부 또는 전체를 메모리에 올리는 기술을 말한다. 파일 백드 페이지는 파일 매핑의 결과물 중 하나이다. 프로그램 코드 및 데이터: 프로그램 실행 중에 사용되는 코드 및 데이터는 해당 프로그램 파일로부터 읽혀져 파일 백드 페이지로 메모리에 로딩된다. 동적 라이브러리 및 공유 객체: 동적 라이브러리나 공유 객체 역시 파일 백드 페이지를 통해 필요한 부분이 메모리에 로딩된다. 파일 백드 페이지와 쓰기 연산 읽기 전용 및 쓰기 가능: 파일 백드 페이지는 읽기 전..

(Project3-Virtual Memory) 스왑 디스크(Swap Disk)

스왑 디스크는 주기억장치(RAM)가 꽉 차거나 더 이상 필요하지 않은 데이터를 임시로 저장하는 데 사용되는 디스크 공간을 의미한다. 스왑 디스크는 주로 하드 디스크(HDD) 또는 고성능의 솔리드 스테이트 드라이브(SSD)와 같은 보조 저장 장치에 할당된다. 스왑 디스크의 역할 가상 메모리 확장: 주기억장치(RAM)의 한계를 극복하기 위해 스왑 디스크는 가상 메모리를 지원하며, 필요한 경우 주기억장치와 스왑 디스크 사이에서 데이터를 교환한다. 페이지 교체: 페이지 교체 정책에 따라 필요한 페이지를 스왑 디스크로 내림으로써 새로운 페이지를 주기억장치에 올릴 수 있도록 돕는다. 스왑 디스크의 주의사항 I/O 부하: 스왑 디스크를 사용하는 동안 발생하는 입출력(I/O) 작업은 주기억장치에 비해 느리기 때문에, ..

(Project3-Virtual Memory) 익명 페이지(Anonymous page)

익명 페이지는 특정 파일과 연결되지 않은 페이지로, 디스크에 저장된 파일과 직접적인 관련이 없는 페이지를 의미한다. 익명 페이지는 디스크 대신 메모리에만 존재하며, 프로세스의 실행 중에 동적으로 할당되거나 사용되는 데이터에 대응된다. 익명 페이지의 역할 동적 할당 및 해제: 익명 페이지는 주로 동적 메모리 할당과 관련이 있으며, 프로세스가 런타임 중에 메모리를 필요로 할 때 동적으로 할당되고 필요 없어지면 다시 해제된다. 힙과 스택: 프로세스의 힙(heap)과 스택(stack) 영역에서 익명 페이지는 동적으로 할당된 데이터를 저장하는 데 사용된다. 익명 페이지의 특징 임시적인 데이터 저장: 익명 페이지는 주로 임시적으로 필요한 데이터를 저장하는 데 사용되므로, 프로세스의 런타임 동안의 데이터 흐름을 관리..

(Project3-Virtual Memory) 페이지 교체 알고리즘(Page Replacement Policy)

페이지 교체 정책은 물리 메모리가 가득 찬 상태에서 새로운 페이지를 적재하기 위해 어떤 페이지를 내릴지를 결정하는 정책이다. 주요 페이지 교체 정책 - FIFO(First-In-First-Out): 가장 먼저 들어온 페이지를 제일 먼저 내리는 방식이다. 단순하고 구현이 쉽지만, 프레임 수를 늘려도 페이지 폴트가 더 많이 발생하는 벨라디의 모순(Belady's Anomaly)이 발생할 수 있다. - LRU(Least Recently Used): 최근에 사용되지 않은 페이지를 우선으로 내리는 방식이다. 각 페이지에 접근할 때마다 사용 시간을 업데이트하고, 가장 오래 전에 사용된 페이지를 교체한다. - LFU(Least Frequently Used): 가장 적게 사용된 페이지를 우선으로 내리는 방식이다. 각 ..

(Project3-Virtual Memory) 지연 로딩(Lazy Loading)

Lazy Loading은 필요한 시점까지 데이터나 자원을 불러오지 않고, 필요한 순간에만 해당 자원을 로딩하는 전략을 말한다. 애플리케이션 시작 시 초기 로딩 시간을 최소화하고, 자원을 효율적으로 관리하여 성능을 향상시킨다. Lazy Loading의 동작 원리 요청 시 로딩: 필요한 데이터나 자원이 사용자에 의해 요청되기 전까지는 로딩되지 않는다. 즉시 로딩 vs. Lazy Loading: 즉시 로딩은 초기에 모든 자원을 로딩하는 반면, Lazy Loading은 필요한 시점에만 로딩하여 초기 로딩 시간을 단축한다. Lazy Loading의 적용 분야 이미지 로딩: 웹 페이지에서 이미지를 Lazy Loading하여 초기 페이지 로딩 속도를 향상시킨다. 데이터베이스 쿼리: 필요한 경우에만 데이터베이스에서 쿼..

(Project3-Virtual Memory) 페이지 오류(Page Fault)

페이지 폴트는 프로세스가 필요로 하는 페이지가 물리 메모리에 없어서 발생하는 예외 상황을 의미한다. 페이지 폴트의 원인 초기 로딩: 프로그램이 실행될 때 초기에 필요한 페이지들이 메모리에 로딩되지 않은 경우. 페이지 교체: 물리 메모리에 여유 공간이 부족해져 페이지 교체가 필요한 경우. 처음부터 물리 메모리에 없는 페이지에 접근: 처음부터 물리 메모리에 없는 페이지에 접근하는 경우. 페이지 폴트 처리 메커니즘 페이지 폴트 핸들링: 운영체제는 페이지 폴트를 감지하고, 필요한 페이지를 디스크에서 읽어와 물리 메모리에 적재한다. 페이지 교체 알고리즘: 물리 메모리가 가득 찬 상태에서 페이지 폴트가 발생하면 어떤 페이지를 교체할지 결정하기 위해 페이지 교체 알고리즘이 사용된다. 페이지 폴트와 성능 성능 저하: ..

(Project3-Virtual Memory) 변환 색인 버퍼(TLB)

TLB는 페이지 테이블의 일부를 캐시하는 캐시 메모리로, 페이지 테이블에서 가장 최근에 사용된 페이지 번호와 물리 주소의 매핑을 저장한다. TLB는 태그와 데이터로 구성되어 있으며, 태그는 가상 페이지 번호를, 데이터는 해당 가상 페이지 번호에 대응하는 물리 주소와 제어 정보를 저장한다. TLB의 동작 원리 가상 주소 변환: 프로세스가 가상 주소에 접근하려고 할 때, TLB에 해당 가상 페이지 번호가 있는지 검사하고 있으면 물리 주소를 즉시 제공한다. TLB 미스(TLB Miss): TLB에 가상 페이지 번호가 없는 경우, 페이지 테이블에서 해당 페이지 번호를 검색하고 TLB에 엔트리를 추가한다. TLB와 성능 최적화 적중률 최대화: TLB의 적중률을 높이기 위해 적절한 TLB 크기와 교체 알고리즘을 선..

(Project3-Virtual Memory) 페이지 테이블(Page Table)

페이지 테이블은 가상 주소와 물리 주소 간의 대응 관계를 기록한 표이다. 가상 메모리를 사용하는 시스템에서는 페이지 테이블을 통해 가상 주소가 어떤 물리 주소로 변환되는지를 알 수 있다. 각 프로세스마다 별도의 페이지 테이블이 존재하며, 페이지 테이블은 페이지 번호와 해당 페이지의 물리 주소를 매핑하는 엔트리로 구성된다. 페이지 테이블의 동작 원리 가상 주소 변환: 프로세스가 가상 주소에 접근하려고 할 때, 페이지 번호를 추출하고 이를 페이지 테이블에서 검색하여 해당 페이지의 물리 주소를 찾아낸다. 페이지 폴트 처리: 만약 페이지 테이블에서 해당 페이지 번호를 찾을 수 없다면 페이지 폴트가 발생하며, 운영체제는 디스크에서 해당 페이지를 읽어와 램에 적재하고 페이지 테이블을 갱신한다. 다단계 페이지 테이블..

(Project3-Virtual Memory) 가상 메모리(Virtual Memory)

가상 메모리는 실제 램 외에 하드 디스크 등의 보조 기억장치를 활용하여 램 용량을 확장하는 기술이다. 프로그램이 필요로 하는 데이터를 램에 모두 올리지 않고, 일부만 램에 올려두고 나머지는 하드 디스크에 저장한다. 이를 통해 램의 용량 제약을 극복하고 더 큰 프로그램을 실행할 수 있게 된다. 가상 메모리 작동 원리 페이징(Paging): 램과 디스크를 일정한 크기의 페이지로 나누고, 필요한 페이지만 램에 로드한다. 세그멘테이션(Segmentation): 프로그램을 논리적인 단위인 세그먼트로 나누고, 필요한 세그먼트만 램에 로드한다. 페이지 폴트(Page Fault): 프로그램이 특정 페이지에 접근할 때 해당 페이지가 램에 없으면 페이지 폴트가 발생하고, 운영체제는 필요한 페이지를 디스크에서 램으로 가져온..

(Project2-User Programs) 세그멘테이션 오류(Segmentation Fault)

"Segmentation Fault"는 일반적으로 메모리 접근 오류를 나타낸다. 프로그램이 메모리의 허용되지 않은 영역에 접근하려고 할 때 발생한다. 이는 주로 배열 인덱스 오버플로우, 포인터 문제, 해제된 메모리에 접근하는 등의 상황에서 발생할 수 있다. Segmentation Fault 해결 방법 코드 리뷰: 코드를 다시 검토하고, 배열 인덱스나 포인터 사용 시 올바른 범위 내에서 접근하는지 확인한다. 메모리 관리: 동적 할당한 메모리를 올바르게 해제하고, 더 이상 사용하지 않는 메모리에 접근하지 않도록 한다. 디버깅 도구 활용: gdb와 같은 디버깅 도구를 사용하여 세그멘테이션 폴트가 발생한 시점을 찾아내고 디버깅을 수행한다. Segmentation Fault 를 방지하는 프로그래밍 습관 배열 및 ..