분류 전체보기 42

(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 를 방지하는 프로그래밍 습관 배열 및 ..

(Project2-User Programs) 인터럽트(Interrupt)

인터럽트는 컴퓨터의 정상적인 프로그램 실행을 방해하고, 특정 사건이 발생했을 때 우선적으로 처리되도록 하는 메커니즘이다. 이러한 사건은 주로 하드웨어나 외부 디바이스에서 발생하며, 예를 들어 키보드나 마우스를 통한 사용자의 입력, 타이머의 만료, 입출력 장치의 데이터 도착 등이 있다. 1. 인터럽트의 종류 하드웨어 인터럽트: 주로 하드웨어 장치에서 발생하며, 외부에서 발생한 이벤트에 의해 트리거된다. 소프트웨어 인터럽트: 소프트웨어에서 명령을 수행하다가 일부 예외 상황이나 특정 조건에 도달했을 때 발생한다. 2. 인터럽트의 동작 과정 인터럽트 발생: 외부 이벤트가 발생하면, 해당 인터럽트에 대한 신호가 발생한다다. 현재 수행 중인 작업 중단: CPU는 현재 실행 중인 명령을 일시 중단하고, 중단된 지점을..

(Project2-User Programs) 32 bit OS vs 64 bit OS

1. 비트(Bit)의 의미 32비트 OS: 각 메모리 주소가 32비트로 표현된다. 이는 시스템이 최대 4GB의 RAM을 직접 주소 지정할 수 있음을 의미한다. 64비트 OS: 각 메모리 주소가 64비트로 표현된다. 더 큰 주소 공간을 제공하여 수십 테라바이트의 RAM을 처리할 수 있다. 2. 메모리 관리 32비트 OS: 주소 공간의 한계로 인해 시스템이 지원하는 최대 메모리 양이 제한된다. 보통 4GB의 물리 메모리 한계를 가진다. 64비트 OS: 대규모 메모리 지원이 가능하며, 현대 시스템에서 더 효과적으로 활용된다. 수십 테라바이트의 물리 메모리 지원이 일반적이다. 3. 프로세서 성능 및 레지스터 크기 32비트 OS: 32비트 프로세서에 최적화되어 있다. 32비트 레지스터를 사용하므로 데이터 처리 속..

(Project2-User Programs) rax 레지스터(rax register)

RAX 레지스터는 x86 아키텍처에서의 64비트 레지스터 중 하나로, Accumulator(누산기)의 약어이다. 이 레지스터는 다양한 목적으로 사용되며, 주로 산술 및 논리 연산, 데이터의 저장과 이동 등에 활용된다. RAX 레지스터는 또한 함수의 반환값을 저장하는 데에도 사용되어 함수 호출에서 중요한 역할을 한다. 용도와 기능 산술 및 논리 연산: RAX 레지스터는 산술 및 논리 연산을 수행하는 데에 사용된다. 연산 결과는 RAX에 저장되어 다음 명령어에서 활용될 수 있다. 데이터의 임시 저장: 프로그램이 실행되는 동안 발생하는 임시 데이터나 계산 중인 중간 값 등을 저장하는 데에 사용된다. 함수 호출과 반환값 저장: 함수 호출 시, 인자 전달과 반환값 저장에 사용된다. 특히, 64비트 아키텍처에서는 ..

(Project2-User Programs) 원자적 연산(Atomic Operation)

Atomic Operations(원자 연산)은 다중 스레딩 환경에서 데이터의 일관성과 안전성을 보장하기 위한 중요한 개념이다. Atomic Operations은 '원자적인'이라는 의미로, 이는 연산이 반드시 분리되지 않고 원자적으로 실행되어야 함을 나타낸다. 다중 스레딩 환경에서 여러 스레드가 동시에 데이터를 읽거나 쓰는 경우, 이러한 연산이 원자적으로 수행되지 않으면 예측할 수 없는 결과가 발생할 수 있다. 위 그림의 경우 원자성이 보장됨으로써 R.write(2) 연산 도중에 R.write(3) 연산의 영향을 받지 않게 된다. Atomic Operations의 예: Atomic Add (원자적 덧셈): 여러 스레드가 동시에 하나의 변수에 값을 더하려고 할 때, Atomic Add 연산은 해당 변수의 값..

(Project2-User Programs) 캐시(Cache)

캐시는 데이터나 값을 미리 복사해 두는 고속의 임시 저장 공간을 말한다. 이는 주로 느린 주 기억장치(메인 메모리)와 빠른 CPU 간의 속도 차이를 극복하고자 도입되었다. 캐시는 데이터에 대한 빠른 액세스를 제공함으로써 전체 시스템 성능을 향상시킨다. 캐시의 동작 원리 적중(Hit): CPU가 필요한 데이터를 캐시에서 찾았을 때를 말한다. 이 경우, 메모리보다 캐시에서 데이터를 가져오기 때문에 더 빠른 속도로 처리된다. 실패(Miss): CPU가 필요한 데이터를 캐시에서 찾지 못했을 때를 말한다. 이 경우, 메모리에서 데이터를 가져와야 하므로 더 많은 시간이 소요된다. 캐시의 종류 레벨 1 캐시(L1 Cache): CPU 내부에 위치하며 매우 빠른 속도로 액세스 가능하다. 레벨 2 캐시(L2 Cache)..