User mode: 유저 애플리케이션이 실행되는 제한된 권한 모드로, 시스템 자원에 직접 접근하지 못하고, 시스템 콜을 통해서만 커널에 접근.
Kernel mode: 운영체제 커널이 실행되는 권한이 높은 모드로, 모든 시스템 자원과 하드웨어를 제어할 수 있으며, 유저 모드로의 전환이 가능.
User mode 예시: 게임 프로그램이 실행 중일 때, 파일에 접근하거나 메모리를 할당하려는 경우가 있습니다. 게임은 직접 하드웨어에 접근할 수 없으므로, 운영체제에 "파일을 열어줘" 같은 요청을 하고, 커널이 이 요청을 처리합니다.
Kernel mode 예시: 운영체제가 하드웨어에서 데이터를 읽어오거나 네트워크 연결을 설정할 때 커널 모드에서 실행됩니다. 예를 들어, 파일 시스템이 디스크에서 파일을 읽어 오는 작업을 수행할 때 커널 모드로 전환됩니다.

Register: CPU 내부에 위치한 고속 데이터 저장소로, 매우 빠르지만 크기가 작음. 계산 및 데이터 접근 시 가장 먼저 사용.
Memory: RAM과 같은 외부 메모리로, 비교적 크기가 크지만 속도가 느림. CPU가 데이터를 처리하기 전에 로드하는 주요 저장소.
Register 예시: 계산을 수행할 때 CPU는 rax 레지스터에 값을 저장하고, 이 값을 바로 연산에 사용합니다. 레지스터는 빠르지만 크기가 작아, 연산에 필요한 데이터만 잠시 저장합니다.
Memory 예시: 컴퓨터가 큰 배열을 처리할 때, 이 배열은 RAM에 저장됩니다. CPU는 데이터를 사용하기 전에 이 메모리에서 필요한 부분을 로드합니다.
유저 모드 프로그램이 사용하는 스택으로 함수 호출 시 매개변수와 반환 주소, 지역 변수를 저장. 프로그램의 메모리 영역에서 하단부에 위치하여 위로 확장됨.
User Stack 예시: 프로그램이 여러 함수를 호출할 때, 각 함수는 호출된 위치와 매개변수 등을 스택에 저장합니다. 함수가 끝나면 이 정보가 스택에서 제거되며 원래 위치로 돌아옵니다.

유저 모드에서 커널 모드의 기능을 호출하기 위한 인터페이스. 파일 조작, 메모리 할당, 네트워크 통신 등의 기능을 커널에 요청하는 방법.
System Call 예시: 파일을 저장할 때 open(), read(), write() 같은 시스템 콜을 사용합니다. 사용자 프로그램이 파일을 직접 읽거나 쓸 수 없으므로, 커널에 요청을 보내 파일 조작을 수행합니다.
운영체제에서 파일이나 I/O 장치를 추상화한 정수 값으로, 파일 접근 시 사용. 프로세스가 파일을 열 때마다 새로운 파일 디스크립터가 생성됨.
File Descriptor 예시: 프로그램이 open("file.txt")로 파일을 열면, 운영체제는 파일 디스크립터(예: 3)를 반환합니다. 이후 이 디스크립터를 사용해 파일을 읽고 쓰기 작업을 할 수 있습니다.

데이터 접근 속도를 높이기 위해 자주 사용하는 데이터를 임시로 저장하는 메모리. CPU 캐시, 디스크 캐시 등 다양한 종류가 있으며, 주 메모리보다 빠름.
Cache 예시: 브라우저가 자주 방문하는 웹페이지의 일부 데이터를 캐시에 저장해, 다음에 동일한 페이지를 방문할 때 빠르게 로드할 수 있습니다.

분할할 수 없는 하나의 연산으로, 중단되지 않고 완료되어야 함. 멀티스레드 환경에서 데이터 경합을 방지하기 위해 중요한 연산 방식.
Atomic Operation 예시: 다중 스레드 환경에서 두 스레드가 동시에 변수 counter를 증가시키면 예상치 못한 결과가 나올 수 있습니다. 이때 counter++를 원자적으로 처리하여 두 스레드가 동시에 변수에 접근하지 못하도록 보호합니다.

x86-64 아키텍처에서 사용되는 범용 레지스터 중 하나로, 주로 함수의 반환 값을 저장하는 데 사용됨. 64비트 값 저장이 가능.
rax register 예시: 함수가 수행을 마치고 return 0;을 실행하면 반환값 0이 rax 레지스터에 저장됩니다. CPU는 rax를 참조해 함수의 결과를 확인합니다.

32비트 OS: 최대 4GB의 메모리 주소 공간을 사용할 수 있으며, 32비트 레지스터 사용.
64비트 OS: 더 큰 메모리(이론적으로 최대 16엑사바이트)를 지원하며, 64비트 레지스터를 사용해 더 높은 성능을 제공.
32 bit OS 예시: 오래된 컴퓨터에서 실행되는 32비트 윈도우는 최대 4GB의 메모리만 사용할 수 있어, 여러 프로그램을 동시에 실행하기 어려울 수 있습니다.
64 bit OS 예시: 최신 컴퓨터에서 실행되는 64비트 리눅스는 수십 기가바이트의 메모리를 사용할 수 있어, 고사양 프로그램도 원활히 동작합니다.
CPU가 현재 작업을 중단하고 즉시 특정 작업을 수행해야 할 때 발생하는 신호. 하드웨어 및 소프트웨어 인터럽트가 있으며, 중요한 이벤트 발생 시 커널이 이를 처리.
Interrupt 예시: 키보드 입력이 발생하면 CPU는 현재 작업을 멈추고 입력 값을 읽어오는 작업을 수행한 후, 원래 작업으로 돌아갑니다. 키보드 입력은 하드웨어 인터럽트입니다.

프로세스가 허용되지 않은 메모리 영역에 접근하려고 할 때 발생하는 오류. 잘못된 포인터 사용, 잘못된 배열 인덱스 접근 등이 원인이 됨.
Segmentation Fault 예시: C 언어 프로그램에서 잘못된 포인터로 접근할 경우, 허용되지 않은 메모리 영역에 접근하려다 세그멘테이션 오류가 발생합니다.
Segmentation Fault 오류가 발생했을 때의 대표적인 메시지 예시는 다음과 같습니다:
| 특징 | Segmentation Fault | Page Fault |
|---|---|---|
| 발생 원인 | 잘못된 메모리 접근 | 페이지가 물리 메모리에 없는 경우 |
| 처리 방식 | 프로세스를 강제 종료 | 페이지 로드 후 접근 재시도 (또는 Segmentation Fault로 전환) |
| 일반적인 오류 메시지 | Segmentation fault (core dumped) | 없음 (운영체제 내부에서 처리) |
| 개발자 대응 방식 | 디버거로 원인 분석 | 일반적인 경우 대응 불필요, 필요시 가상 메모리 관리 |
Segmentation fault (core dumped)
Program received signal SIGSEGV, Segmentation fault.
