올해 목표는 CS 개념을 확실하게 공부하는 것!!
Operating System
운영체제는 소프트웨어와 하드웨어 사이에서 중재자 역할을 하는 시스템 소프트웨어 입니다.
사용자가 응용프로그램을 통해 서비스를 요청하면, 운영체제는 하드웨어를 제어하여 요청된 서비스를 수행하고 자원을 관리합니다. 사용자와 컴퓨터 시스템 간의 인터페이스를 제공하여 프로그램을 효율적으로 실행합니다.
사용자 영역과 커널 영역으로 이루어지며, 커널, 사용자 인터페이스, 시스템 라이브러리, 시스템 유틸리티로 구성됩니다.
Operating System Functions
- User Interface (CLI, GUI)
- Program Execution
- I/O operation (device control)
- File system manipulation
- Communication, IPC
- Error detection
- Resoruce allocation (CPU Scheduling, Paging, Segmentation)
- Accounting
- Protection, Security (Authentication, Access Control, Encryption, Firewall)
Kernel
커널은 운영체제의 핵심 부분으로, 소프트웨어와 하드웨어 사이에서 중재자 역할을 하며, 시스템 자원을 관리합니다.
프로그램이 실행되기 위해서는 CPU가 해당 프로그램의 명령을 실행해야 합니다. 프로그램을 실행하기 위해서는 프로그램을 메모리에 적재한 후, CPU가 실행할 수 있도록 해야 합니다.
운영체제도 프로그램의 일종이기 때문에, 컴퓨터가 부팅될 때 커널이 메인 메모리에 적재됩니다. 커널이 메모리에 올라가면, 운영체제는 자원을 관리하고 사용자 프로그램을 실행할 준비를 합니다. 이후 사용자가 프로그램을 실행하면, 운영체제는 프로그램을 메모리에 올리고 CPU가 실행합니다.
하지만, 운영체제 전체를 메모리에 올리는 것은 비효율적이기 때문에 핵심 기능을 담당하는 커널만 메모리에 올리게 됩니다. 컴퓨터가 부팅되면 커널이 메모리에 로드되어 하드웨어 및 소프트웨어 관리를 수행합니다.
즉, 커널은 운영체제의 핵심 부분으로, 메모리에 상주하여 하드웨어와 소프트웨어 간의 인터페이스 역할을 합니다.
User mode vs Kernel mode
운영체제는 보안과 안정성을 위해 커널 모드와 사용자 모드로 실행됩니다.
커널 영역은 하드웨어 자원에 직접 접근이 가능하며, 사용자 영역의 프로그램은 하드웨어에 직접 접근이 불가능합니다.
그러면 사용자 영역에서는 하드웨어 자원에 어떻게 접근할까?
모든 하드웨어 자원은 커널 영역에서 처리되기 때문에 자원에 접근하기 위해서는 반드시 운영체제의 커널을 통해서만 가능합니다. 그래서 사용자 프로그램이 커널의 기능을 사용하려면 시스템 콜을 호출해야 합니다. 시스템 콜을 호출하면 커널모드로 전환되고, 커널이 하드웨어 자원에 접근하여 필요한 작업을 수행하게 됩니다.
- 프로세스 관리 : 프로세스 생성,종료,상태 관리, CPU 스케줄링, 컨텍스트 스위칭
- 메모리 관리 : 프로세스에 작업 공간 배치, 가상메모리 사용, 페이지 쿄체 알고리즘
- 파일 시스템 관리 : 데이터 저장,접근을 위한 인터페이스 제공, 디스크에 파일 읽기/쓰기 작업, 권한 및 보안
- 입출력 관리 : 키보드, 마우스, 디스크 등 입출력 장치 관리, 인터럽트 처리를 통해 I/O 장치와 커널 간의 통신 수행
- 프로세스 간 통신 관리 : 공유 메모리, 메시지 큐, 소켓 등
- 인터럽트 처리: 하드웨어에서 발생하는 인터럽트 처리
- 가상 메모리 관리
🚩 커널의 동작 과정
- 전원 부팅시, Bootloader가 커널을 메모리에 적재
- 커널이 실행되면서 시스템 초기화 진행
- 시스템이 동작 및 사용자 요청 처리
- 사용자가 프로그램 실행 시, 커널이 CPU 및 메모리 할당
- 운영체제가 종료 시, 커널 종료
System Call
시스템 콜은 응용 프로그램이 운영체제의 기능을 사용하기 위한 인터페이스 입니다. 보안과 안정성을 위해서 사용자 프로그램은 하드웨어 자원에 직접 접근할 수 없는데, 시스템 콜을 사용해서 접근이 가능ㅎ바니다ㅏ.
사용자 영역에서 실행 중인 프로그램이 하드웨어 자원이나 시스템 자원에 접근하려면, 직접 접근할 수 없기 때문에 커널 모드로 전환해야 합니다. CPU는 사용자 모드에서 커널 모드로 전환된 후, 커널이 요청된 작업을 수행한 후 결과를 사용자 프로그램에 반환합니다.
- 사용자 프로그램이 System Call ( open(), read(), write() )
- 인터럽트를 통해 커널 모드로 전환
- 커널이 요청된 작업 처리
- 작업이 완료되면, 결과를 사용자 프로그램에 반환
- CPU가 다시 사용자 모드로 전환되어 프로그램 계속 실행
System Call Types
- Process Control (fork, exec, exit, wait)
- File management (open, read, write, close)
- Device Management (ioctl, read, write)
- Information Maintenance (getpid, alarm)
- Communication (socket, send, recv, pipe)
컴퓨터가 전원을 켠 후 운영체제를 로드하여 사용자가 사용할 수 있는 상태로 만드는 과정입니다. 이 과정에서 하드웨어가 초기화되고, 운영체제의 커널이 메모리에 로드된 후 시스템이 실행 준비합니다.
🚩 부팅 과정
1. Power-On
- 컴퓨터의 전원이 켜지면 Power Supply Unit(PSU)이 전력을 공급합니다.
- PSU가 활성화되고, CPU, 메모리, 입출력 장치 등의 하드웨어가 초기화됩니다.
🔸 BIOS(Basic Input/Output System)는 하드웨어를 초기화하고 운영체제를 로드하는 시스템으로 이때 실행됩니다.
2. POST (Power-On Self Test)
- BIOS/UEFI가 POST를 실행합니다.
- POST는 컴퓨터가 부팅될 때 하드웨어가 정상적으로 작동하는지 점검하는 테스트 과정입니다.
- CPU, RAM, 저장장치, 그래픽카드 등 주요 하드웨어의 이상 여부를 점검하고, 이상이 없으면 다음 단계로 넘어갑니다.
- 이 과정에서 문제가 발생할 경우, POST Beep Code 또는 오류 메시지를 출력합니다.
3. BootLoader 실행
- POST가 완룓되면, BIOS는 BootLoader를 실행합니다.
- BootLoader는 보통 하드디스크나 SSD의 부트 섹터에 위치합니다.
🔸Bootloader는 운영체제 커널을 메모리에 로드하는 프로그램입니다.- GRUB (리눅스)
- LILO (옛 리눅스)
- Windows Boot Manager
- OpenCore, Clover
- 부트로더가 운영체제의 커널을 메모리에 로드합니다.
- 커널이 실행되면 하드웨어와 소프트웨어 간의 인터페이스 역할을 하고, 사용자 프로그램이 실행될 수 있는 환경을 준비합니다.
- 커널이 메모리에 올라간 후, 드라이버, 네트워크, 파일 시스템, 데몬 프로세스 등 핵심 시스템 서비스들이 백그라운드에서 실행됩니다.
6. 로그인 화면 표시 및 사용자 환경 제공
- 운영체제의 GUI, CLI 화면이 나타나고, 사용자가 인증하면 개인 환경이 로드됩니다.
부트로더(Bootloader)와 커널 로드 과정
부트로더는 커널을 메모리에 적재하는 역할을 하며, BIOS/UEFI와 상호작용하여 부팅을 진행합니다.
🚩 부트로더와 커널 로드 과정
- BIOS/UEFI가 부트 디바이스를 확인 (HDD, SSD, USB 등)
- 부트로더가 실행되며, 운영체제의 커널을 찾음
- 운영체제 커널이 메모리에 로드됨
- 커널이 실행되면서 시스템 초기화 진행
부팅 모드 종류
- 기본적인 부팅 방식으로, 부트로더가 MBR(Master Boot Record)에 위치하여 커널을 로드합니다.
- 2TB 이하의 디스크를 지원함, 부팅 속도가 상대적으로 느립니다.
- 텍스트 기반의 인터페이스를 사용하고, 키보드로 설정 변경이 가능합니다..
- BIOS를 대체한 새로운 부팅 방식으로, GPT (GUID Partition Table) 기반으로 2TB이상의 디스크를 지원합니다.
- 부팅 속도가 빠르고, 안정적인 시스템 운영이 가능하며, GUI를 제공합니다.