☑️ 유저 모드 vs 커널 모드(User Mode vs Kernel Mode)
운영체제에서 하드웨어의 주요 권한을 응용 프로그램으로부터 보호하기 위해 사용되는 기법
⭐ 커널이란?
- 영문 사전에서 커널(Kernel)은 '핵심'을 의미한다.
- 컴퓨터 과학 용어들은 단어의 뜻 그대로를 가리키는 경우가 많다.
- 커널도 운영체제에서 핵심을 의미한다.
- 커널의 주요 기능은 다음과 같다.
- 메모리의 할당 및 해제를 관리한다.
- 프로세스 생성 및 소멸을 관리하며 어떤 프로세스가 CPU에 할당될지 결정한다.
- 하드웨어 장치를 제어하고 입출력 작업을 처리한다.
- 응용 프로그램에서 요구하는 요청을 처리한다.
⭐ 유저 모드 vs 커널 모드
- 커널은 위와 같이 컴퓨터 하드웨어의 핵심적인 역할을 담당한다.
- 이러한 커널이 응용 프로그램에서 다뤄지게 된다면, 악용되거나 시스템의 안정성을 깨트리게 될 수 있다.
- OS는 2가지의 모드로 분리해서 커널을 관리한다.
- 커널 모드에서는 커널에 접근하여 주요 작업을 처리할 수 있다.
- 응용 프로그램은 사용자 모드에서 작동한다.
- 응용 프로그램에서 커널의 도움이 필요한 작업(파일 입출력, 프로세스 관리, 등)이 있다면 시스템 콜을 통해서 운영체제를 일시적으로 커널 모드로 전환하여 작업을 처리할 수 있다.
- 커널 모드는 하드웨어의 권한 전역에 접근할 수 있는 기능을 제공한다.
- 유저 모드는 하드웨어의 지정된 영역에서만 접근할 수 있다.
☑️ 레지스터 vs 메모리(Register vs Memory)
레지스터와 메모리는 기억 장치를 의미한다. 다만, 레지스터는 특정한 목적을 가진 빠른 속도의 저장소다.
- 레지스터와 메모리는 데이터를 처리하는 기억 장치다.
- 레지스터 : CPU 내부에 위치한 초고속 임시 저장 장치
- 메모리 : CPU 외부에 위치한 주기억장치
- 동일한 역할을 하는 장치가 2개인 것은 CPU의 병목현상에 이유가 있다.
- CPU는 매우 빠른 속도로 작업을 처리한다.
- 메모리는 CPU 보다는 적은 속도를 가진다.
- 이로 인해서 CPU가 메모리를 기다리는 병목 현상이 발생할 수 있다.
- CPU 병목 현상을 해소하고자, CPU 내부에 메모리, 레지스터를 위치시켰다.
- 레지스터는 실행 중인 프로그램에 대한 정보가 담긴다.
☑️ 유저 스택(User Stack)
프로그램 실행 중에 임시로 할당되는 메모리 영역 중 하나
- 프로세스는 하나의 유저 스택과 커널 스택을 가지게 된다.
- 유저 스택은 프로세스가 유저 모드에서 처리될 때 사용되는 메모리 영역을 의미한다.
- 커널 스택은 프로세스가 커널이 필요한 작업을 요청했을 때, 커널 모드의 작업을 처리할 때 사용된다.
- 커널 스택은 커널 영역에 위치해 있으므로, 프로세스가 직접 접근할 수 없다.
- 유저 스택은 프로세스 할당 시에 생성된다.
- 프로그램이 시작하면 진입점(Entry-Point)에 들어가는 Command와 Argument , 기타 정보를 저장한다.
- 실행 중에는 Local 변수 및 함수의 Return Address와 같은 정보들을 보유한다.
- 프로그램 실행 종료 후의 Exit Address도 보유하게 된다.
☑️ 시스템 콜(System Call)
하드웨어의 기능을 사용할 수 있도록 추상화한 메서드
- 시스템 콜은 응용 프로그램이 OS가 제공하는 서비스에 접근할 수 있도록 하는 인터페이스(함수)를 의미한다.
- 커널에 존재하는 기능들을 사용하기 위해서는 시스템 콜을 통해서 접근해야 한다.
- 응용 프로그램은 직접적으로 하드웨어를 조작하는 것이 아니라, 시스템 콜을 통해서 조작하게 된다.
- 프로세스 관리, 파일 입/출력, 디바이스 관리, 프로세스 통신, 메모리 관리, 등
- 시스템 콜을 호출하면 유저 모드에서 커널 모드로 변경된다.
- 작업이 완료되면 다시 유저 모드로 전환한다.
☑️ 파일 디스크립터(File Descriptor)
프로세스가 파일 접근/수정에서 사용하는 추상적인 값
- 파일 디스크립터는 Linux/Unix 계열의 OS에서 프로세스가 파일을 다룰 때 사용되는 추상적인 값이다.
- 해당 계열의 OS는 파일, 폴더, 소켓, 등의 모든 객체들을 '파일'로 분류한다.
- 파일 디스크립터는 음수가 아닌 정수를 값으로 가진다.
- 모든 프로세스는 각자 파일 디스크립터를 가지게 된다.
- 0은 표준 입력, 1은 표준 출력, 2는 표준 에러의 의미를 가진다.
- 프로세스 ID를 통해서 파일 디스크립터(File Descriptor)를 확인할 수 있다.
- 파일 디스크립터를 할당하는 주체는 커널이다.
☑️ 캐시(Cache)
메모리와 레지스터 사이를 잇는 보조 기억 장치
- 레지스터와 동일하게 CPU의 병목현상을 줄이기 위해서 사용되는 메모리다.
- 캐시 메모리는 지역성(Locality) 개념으로 인해서 CPU 성능을 향상한다.
- 시간 지역성은 한 번 접근된 데이터는 짧은 시간 동안 다시 접근될 가능성이 높다는 의미다.
- 공간 지역성은 호출된 메모리 주소의 인근 주소로 다시 접근할 가능성이 높다는 의미다.
- 두 가지 지역성을 기반으로 캐시 메모리는 데이터를 보유한다.
- 이로 인해서 CPU는 빠르게 원하는 정보를 찾을 수 있다.
☑️ 원자적 연산(Atomic Operation)
실행 중인 프로그램의 OS에서의 관점을 프로세스라고 한다.
- 실행 시에 중단 없이 실행되는 연산을 의미한다.
- 원자적 연산은 작은 원자적 연산과 큰 원자적 연산을 가진다.
- 작은 원자적 연산 : 더 이상 쪼개질 수 없는 연산
- 큰 원자적 연산 : 작은 원자적 연산으로 이루어져 있으나 중단 없이 실행을 보장받은 연산
- OS의 다른 프로세스에 종속되거나 중단되지 않고 실행되어야 하는 병렬 처리에서 많이 사용된다.
- 원자적 연산은 프로세스/스레드의 동시 접근을 방지하며, 데이터의 무결성과 일관성을 유지한다.
- 어떤 프로세스가 변수 N의 값을 10으로 올려주는 함수 Up을 실행했다고 가정하자.
- 함수 Up을 실행하는 중간에 다른 프로세스가 변수 N의 값을 100으로 올렸다.
- 초기 예상된 값은 10이고 함수가 종료되고 나타난 값은 110이 되는 문제가 발생한다.
- 원자적 연산을 사용함으로써 중단 없이 실행을 보장받아 값을 10으로 만들 수 있다
☑️ Rax Register
레지스터 집합에 속하는 레지스터의 이름
- Rax 레지스터는 64비트 환경에 존재하는 휘발성 레지스터다.
- 함수의 반환 값을 저장하는 레지스터다.
☑️ 32bit OS vs 64bit OS
컴퓨팅 연산을 처리할 수 있는 단위가 각각 32Bit, 64Bit인 운영체제
- 운영체제는 컴퓨터 시스템에서 리소스를 관리하고 작업을 실행하는 낮은 계층의 소프트웨어다.
- 1990년대에 컴퓨터는 32 Bit를 가지고 데이터를 처리하거나 전송할 수 있었으며, 운영체제도 이에 맞춰서 32 Bit를 기준으로 연산을 하게 되었다.
- 이를 32 Bit OS라고 한다.
- 이후, 컴퓨터의 연산량이 32 Bit에서 64 Bit로 변경됨에 따라서 64 Bit OS가 나타나게 되었다.
- 64 Bit OS는 기존 32 Bit OS에서 동작하는 프로그램들과의 호환성 계층을 지원한다.
- 64 Bit OS는 이론적(2^64)으로 16 EB(엑사바이트)의 값을 참조할 수 있다.
- 32 Bit의 데이터가 처리되면 64비트 만들어준ㄴ다~ 내일 더 자세하게 쓰렴
☑️ 인터럽트(Interrupt)
프로세스 실행 중에 예외 사항이 발생할 경우, 발생 상황을 처리하기 위한 실행 흐름
- 프로세스 실행 중에 예외가 발생하면 나타나는 신호를 의미한다.
- CPU는 현재 실행 중인 작업을 중단하고 발생된 상황을 처리하고 다시 실행 중인 작업으로 복귀한다.
- 인터럽트는 다음과 같은 순서로 실행된다.
- 인터럽트 신호 발생
- 현재 프로세스 실행 중단 : Atomic Operation까지 작업 실행
- 현재 프로세스의 상태 저장 : PCB에 현재 실행 중인 프로세스 정보/상황 저장
- 인터럽트 처리 루틴 실행, 인터럽트 서비스 루틴 실행 : 인터럽트 원인 파악 후, 우선순위에 따라 실행
- 상태 복구
- 중단 프로세스 실행 재개
☑️ 세그먼테이션 폴트(Segmentation Fault)
허용되지 않은 메모리 영역에 접근하거나 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 때 나타나는 에러
- 기존에는 메모리를 세그먼트라는 블록 단위로 나누었다.
- 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트, 힙 세그먼트
- 서로의 고유한 영역을 침범해서 작업이 진행되면 오류가 발생한다.
- 이때 발생하는 오류가 세그먼테이션 폴트다.
- 즉 허락되지 않은 메모리 영역에 접근하려고 했을 때 발생하는 메모리 접근 오류.
'활동 > 크래프톤 정글' 카테고리의 다른 글
[크래프톤 정글] 크래프톤 정글 7기를 끝마치며.. (0) | 2025.02.10 |
---|---|
[크래프톤 정글/Week 11] 키워드 정리 (0) | 2024.11.23 |
[크래프톤 정글/Week 08/PintOS] Priority Scheduling ( 높은 우선순위 먼저 실행하기 ) (0) | 2024.11.08 |
[크래프톤 정글/Week 08/PintOS] Priority Scheduling ( 정리 ) (1) | 2024.11.07 |
[크래프톤 정글/Week 08] 키워드 정리 (3) | 2024.11.05 |