1. 메모리 누수(Memory Leak)
: 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다.
2. 부트로더(Boot Loader)
: 운영체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.
* OS는 크게 세 부분으로 나뉜다.
(1) 커널 : 실제 명령어들이 구동
(2) 프레임워크 : 프로그램에 포함된 명령어들을 커널에 전해주는 프레임 워크.
(3) UI : 커널과 프레임워크 위에서 구동되는 UI
3. GRUB (Grand Unified Bootloader)
: GNU 하에서 개발된 멀티 부트로더로, 리눅스가 부팅되기까지 부팅의 전 과정을 진행하는 부팅 전문 프로그램을 의미한다. (하드 디스크의 첫 번째 부트 섹터인 MBR(Master Boot Record)에 저장된다.
4. 리눅스 커널 (Linux Kernal)
Linux 커널은 Linux 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다. 그리고 두 가지 관리 리소스 사이에서 최대한 효과적으로 통신한다. 하드웨어의 모든 주요 기능을 제어한다.
- 주요 기능
(1) 메모리 관리
(2) 프로세스 관리
(3) 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리터 역할을 수행
(4) 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신
5. Linux 시스템의 구성
(1) 하드웨어: 시스템의 토대가 되는 물리적 머신 ( 메모리(RAM), 프로세서 또는 중앙처리장치(CPU), 입출력장치)
- CPU는 계산을 수행하고 메모리를 읽고 쓴다.
(2) Linux 커널 : OS의 핵심. 메모리에 상주하며 CPU에 명령을 내리는 소프트웨어
(3) 사용자 프로세스 : 실행 중인 프로그램으로, 커널이 관리한다. 사용자 프로세스가 모여 사용자 공간(웹브라우저 및 파일과 같이 사용자가 볼 수 있는 것)을 구성한다. 커널은 이러한 프로세스 및 서버가 서로 통신(프로세스 간 통신 또는 IPC) 할 수 있도록 해준다.
시스템에서 실행되는 코드는 커널 모드 또는 사용자 모드라는 두 가지 모드 중 하나로 CPU에서 실행된다.
커널 모드에서 실행 중인 코드는 하드웨어에 무제한 액세스가 가능한 반면,
사용자 모드에서는 CPU 및 메모리가 SCI를 통해 액세스하는 것을 제한한다.
이는 프로세스가 사용자 모드에서 실패할 경우 손상이 제한적이며 커널에 의해 복구될 수 있음을 의미한다. 그러나 커널 프로세스는 메모리와 프로세서에 액세스할 수 있기 때문에 충돌이 발생하면 시스템 전체가 중지될 수 있다. 안전 장치가 마련되어 있고 경계를 넘기 위해서는 권한이 필요하기 때문에, 사용자 프로세스 충돌은 일반적으로 커다란 문제를 유발하지 않는다.
6. page cache
- Linux는 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어 사용한다.
- 상대적으로 많이 느린 디스크로의 접근을 최대한 피하기 위해 사용되는 메모리 영역이다.
- 한 번 읽은 파일의 내용을 페이지 캐시라는 영역에 저장해 놨다가 다시 한 번 동일한 파일 접근이 일어나면 디스크에서 읽지 않고 페이지 캐시에서 읽어서 제공해주는 방식.
7. Buffer Cache
: 버퍼 캐시는 블록 디바이스가 가지고 있는 블록 자체에 대한 캐시
커널이 데이터를 읽기 위해서는 블록 디바이스의 특정 블록에 접근해야 하는데, 이 때 해당 블록에 대한 내용을 버퍼 캐시에 담아두고, 동일한 블록에 접근할 경우 블록디바이스까지 요청하지 않고 버퍼 캐시에서 바로 읽어 보여준다.
※ 버퍼 캐시는 파일 시스템의 메타 데이터와 관련된 블록들을 저장하고 있는 캐시이며, 페이지 캐시는 파일의 내용을 저장하고 있는 캐시이다. (해당 영역들은 캐시 용도로 사용하기 때문에 프로세스에게 할당할 메모리가 부족해지면 자연스럽게 반환되어 해제된다. 때문에 실질 메모리 계산 시 buffers/cached 영역을 빼는 것이다.)
※ 파일 I/O 중에 bio 를 사용하지 않는 연산들도 있다. 바로 super block 을 읽거나 inode block 등을 읽을 때이다. 해당 블록들은 크기가 작기 때문에 bio 구조체와 같은 별도의 구조체를 두는 것보다는 기존처럼 블록 디바이스에 대한 직접 접근이 성능이 더 좋다.
Reference
'OS' 카테고리의 다른 글
[OS] Windows Server vs Linux Server (0) | 2021.11.29 |
---|