PintOS PJT2 - Keyword 정리

김수환·2024년 11월 12일

PintOS

목록 보기
5/15

User mode vs Kernel mode

User mode: 유저 애플리케이션이 실행되는 제한된 권한 모드로, 시스템 자원에 직접 접근하지 못하고, 시스템 콜을 통해서만 커널에 접근.
Kernel mode: 운영체제 커널이 실행되는 권한이 높은 모드로, 모든 시스템 자원과 하드웨어를 제어할 수 있으며, 유저 모드로의 전환이 가능.

User mode 예시: 게임 프로그램이 실행 중일 때, 파일에 접근하거나 메모리를 할당하려는 경우가 있습니다. 게임은 직접 하드웨어에 접근할 수 없으므로, 운영체제에 "파일을 열어줘" 같은 요청을 하고, 커널이 이 요청을 처리합니다.
Kernel mode 예시: 운영체제가 하드웨어에서 데이터를 읽어오거나 네트워크 연결을 설정할 때 커널 모드에서 실행됩니다. 예를 들어, 파일 시스템이 디스크에서 파일을 읽어 오는 작업을 수행할 때 커널 모드로 전환됩니다.

Register vs Memory

Register: CPU 내부에 위치한 고속 데이터 저장소로, 매우 빠르지만 크기가 작음. 계산 및 데이터 접근 시 가장 먼저 사용.
Memory: RAM과 같은 외부 메모리로, 비교적 크기가 크지만 속도가 느림. CPU가 데이터를 처리하기 전에 로드하는 주요 저장소.

Register 예시: 계산을 수행할 때 CPU는 rax 레지스터에 값을 저장하고, 이 값을 바로 연산에 사용합니다. 레지스터는 빠르지만 크기가 작아, 연산에 필요한 데이터만 잠시 저장합니다.
Memory 예시: 컴퓨터가 큰 배열을 처리할 때, 이 배열은 RAM에 저장됩니다. CPU는 데이터를 사용하기 전에 이 메모리에서 필요한 부분을 로드합니다.

User Stack

유저 모드 프로그램이 사용하는 스택으로 함수 호출 시 매개변수와 반환 주소, 지역 변수를 저장. 프로그램의 메모리 영역에서 하단부에 위치하여 위로 확장됨.

User Stack 예시: 프로그램이 여러 함수를 호출할 때, 각 함수는 호출된 위치와 매개변수 등을 스택에 저장합니다. 함수가 끝나면 이 정보가 스택에서 제거되며 원래 위치로 돌아옵니다.

System Call

유저 모드에서 커널 모드의 기능을 호출하기 위한 인터페이스. 파일 조작, 메모리 할당, 네트워크 통신 등의 기능을 커널에 요청하는 방법.

System Call 예시: 파일을 저장할 때 open(), read(), write() 같은 시스템 콜을 사용합니다. 사용자 프로그램이 파일을 직접 읽거나 쓸 수 없으므로, 커널에 요청을 보내 파일 조작을 수행합니다.

File Descriptor

운영체제에서 파일이나 I/O 장치를 추상화한 정수 값으로, 파일 접근 시 사용. 프로세스가 파일을 열 때마다 새로운 파일 디스크립터가 생성됨.

File Descriptor 예시: 프로그램이 open("file.txt")로 파일을 열면, 운영체제는 파일 디스크립터(예: 3)를 반환합니다. 이후 이 디스크립터를 사용해 파일을 읽고 쓰기 작업을 할 수 있습니다.

Cache

데이터 접근 속도를 높이기 위해 자주 사용하는 데이터를 임시로 저장하는 메모리. CPU 캐시, 디스크 캐시 등 다양한 종류가 있으며, 주 메모리보다 빠름.

Cache 예시: 브라우저가 자주 방문하는 웹페이지의 일부 데이터를 캐시에 저장해, 다음에 동일한 페이지를 방문할 때 빠르게 로드할 수 있습니다.

Atomic Operation

분할할 수 없는 하나의 연산으로, 중단되지 않고 완료되어야 함. 멀티스레드 환경에서 데이터 경합을 방지하기 위해 중요한 연산 방식.

Atomic Operation 예시: 다중 스레드 환경에서 두 스레드가 동시에 변수 counter를 증가시키면 예상치 못한 결과가 나올 수 있습니다. 이때 counter++를 원자적으로 처리하여 두 스레드가 동시에 변수에 접근하지 못하도록 보호합니다.

rax register

x86-64 아키텍처에서 사용되는 범용 레지스터 중 하나로, 주로 함수의 반환 값을 저장하는 데 사용됨. 64비트 값 저장이 가능.

rax register 예시: 함수가 수행을 마치고 return 0;을 실행하면 반환값 0이 rax 레지스터에 저장됩니다. CPU는 rax를 참조해 함수의 결과를 확인합니다.

32 bit OS vs 64 bit OS

32비트 OS: 최대 4GB의 메모리 주소 공간을 사용할 수 있으며, 32비트 레지스터 사용.
64비트 OS: 더 큰 메모리(이론적으로 최대 16엑사바이트)를 지원하며, 64비트 레지스터를 사용해 더 높은 성능을 제공.

32 bit OS 예시: 오래된 컴퓨터에서 실행되는 32비트 윈도우는 최대 4GB의 메모리만 사용할 수 있어, 여러 프로그램을 동시에 실행하기 어려울 수 있습니다.
64 bit OS 예시: 최신 컴퓨터에서 실행되는 64비트 리눅스는 수십 기가바이트의 메모리를 사용할 수 있어, 고사양 프로그램도 원활히 동작합니다.

Interrupt

CPU가 현재 작업을 중단하고 즉시 특정 작업을 수행해야 할 때 발생하는 신호. 하드웨어 및 소프트웨어 인터럽트가 있으며, 중요한 이벤트 발생 시 커널이 이를 처리.

Interrupt 예시: 키보드 입력이 발생하면 CPU는 현재 작업을 멈추고 입력 값을 읽어오는 작업을 수행한 후, 원래 작업으로 돌아갑니다. 키보드 입력은 하드웨어 인터럽트입니다.

Segmentation Fault

프로세스가 허용되지 않은 메모리 영역에 접근하려고 할 때 발생하는 오류. 잘못된 포인터 사용, 잘못된 배열 인덱스 접근 등이 원인이 됨.

Segmentation Fault 예시: C 언어 프로그램에서 잘못된 포인터로 접근할 경우, 허용되지 않은 메모리 영역에 접근하려다 세그멘테이션 오류가 발생합니다.

Segmentation Fault 오류가 발생했을 때의 대표적인 메시지 예시는 다음과 같습니다:

Segmentation vs Page Fault

특징Segmentation FaultPage Fault
발생 원인잘못된 메모리 접근페이지가 물리 메모리에 없는 경우
처리 방식프로세스를 강제 종료페이지 로드 후 접근 재시도 (또는 Segmentation Fault로 전환)
일반적인 오류 메시지Segmentation fault (core dumped)없음 (운영체제 내부에서 처리)
개발자 대응 방식디버거로 원인 분석일반적인 경우 대응 불필요, 필요시 가상 메모리 관리
Segmentation fault (core dumped)
Program received signal SIGSEGV, Segmentation fault.

profile
juniorDev

0개의 댓글