✅운영체제란?
운영체제(OS, Operating System)는 컴퓨터의 하드웨어를 동작시키고 관리하는 핵심 소프트웨어입니다. 우리가 일상적으로 사용하는 Windows, macOS, Linux 등이 모두 운영체제에 해당합니다.
여기서 핵심은, 운영체제 또한 일종의 소프트웨어이기 때문에, 메모리에 올라가는 프로그램이다. 라고 생각해도 무방하다고 생각합니다.
운영체제의 특별한 위치
일반적인 응용프로그램(Chrome, Word 등)은 메모리의 '사용자 영역'에 적재되어 실행됩니다. 하지만 운영체제는 그 중요성 때문에 커널 영역(Kernel Space)이라는 보호된 특별한 메모리 공간에 상주합니다.
운영체제는 현존하는 프로그램 중 가장 큰 규모를 자랑합니다. 예를 들어 Linux 커널의 경우 2,700만 줄 이상의 코드로 구성되어 있습니다.
운영체제의 핵심 서비스
1. 프로세스 관리
운영체제는 동시에 실행되는 수십, 수백 개의 프로그램들을 체계적으로 관리합니다.
예시: 예를들어, 컴퓨터로 음악을 들으면서, 웹 브라우저로 인터넷을 하고, 동시에 인텔리제이를 띄워놓으며 작업을 한다고 상상해봅시다. 이 세 가지 프로그램이 모두 동시에 원활하게 동작하는 것처럼 느껴지지만, 실제로는 CPU가 이들을 매우 빠르게 번갈아가며 실행하고 있습니다. 이를 시분할 시스템(Time-sharing System)이라고 합니다.
운영체제는 각 프로세스의 생성, 실행, 중단, 종료를 관리하며, 프로세스 간의 충돌을 방지하고 우선순위를 조정합니다.
2. 자원 접근 및 할당
컴퓨터의 핵심 자원(CPU, 메모리, 입출력 장치)을 효율적으로 배분하는 것이 운영체제의 중요한 역할입니다.
2-1) CPU 자원 할당
- CPU 스케줄링: 어떤 프로세스를 먼저 실행할지, 얼마나 오래 실행할지 결정합니다.
- 스케줄링 알고리즘 예시:
- FCFS(First-Come, First-Served): 먼저 온 프로세스를 먼저 처리
- SJF(Shortest Job First): 실행 시간이 짧은 프로세스를 우선 처리
- Round Robin: 각 프로세스에 동일한 시간(타임 슬라이스)을 할당
2-2) 메모리 자원 할당 ( 가상 메모리 활용시)
- 페이징(Paging): 메모리를 고정된 크기의 페이지로 나누어 관리
- 스와핑(Swapping): 메모리가 부족할 때 일부 프로세스를 디스크로 옮겼다가 다시 불러오는 기법
예시: Chrome 브라우저에서 수십 개의 탭을 열어두면 컴퓨터가 느려지는 경험을 해보셨을 겁니다.(메모리가 가득찼기 때문.) 이 때 운영체제는 사용하지 않는 탭의 데이터를 하드디스크로 스왑 아웃하여 메모리 공간을 확보합니다.
2-3) 입출력 장치 자원 할당
- 인터럽트 서비스 루틴(ISR): 키보드, 마우스, 디스크 등의 입출력 장치가 CPU의 주의를 요청할 때 처리합니다.
예시: 키보드로 문자를 입력하면, 키보드는 인터럽트를 발생시켜 CPU에게 "입력 데이터가 있습니다"라고 알립니다. CPU는 하던 작업을 잠시 멈추고 키보드 입력을 처리한 후 다시 원래 작업으로 돌아갑니다.
import java.util.Scanner;
public class InterruptExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long startTime = System.currentTimeMillis();
while (true) {
// CPU 작업 수행
System.out.println("CPU 작업 실행 중..");
// 현재 시간 확인
long now = System.currentTimeMillis();
// 3초가 지났다면 입력 시도
if (now - startTime >= 3000) {
System.out.println("입력 데이터 발생... -> 인터럽트 발생 ");
String input = sc.nextLine(); // BLOCK
System.out.println("입력 받음: " + input);
// 다시 3초 카운트 시작
startTime = System.currentTimeMillis();
}
}
}
}
3. 파일 시스템 관리
운영체제는 보조기억장치(HDD, SSD)에 저장된 데이터를 파일과 디렉토리(폴더) 형태로 조직화하고 관리합니다.
주요 기능:
- 파일 생성, 읽기, 쓰기, 삭제
- 디렉토리 구조 관리
- 파일 접근 권한 제어 및 보안
- 파일 시스템 무결성 유지
파일 시스템 예시:
- Windows: NTFS, FAT32
- macOS: APFS, HFS+
- Linux: ext4, XFS, Btrfs
운영체제의 역할 정리
이처럼, 운영체제는 응용프로그램과 하드웨어 사이의 중재자 역할을 합니다. 응용프로그램이 하드웨어(메모리,CPU 등) 를 직접 제어할 수 없도록, 운영체제는 프로그램의 요청을 받아 하드웨어를 제어하고 결과를 돌려주는 역할을 합니다.
✅커널(Kernel)이란?
커널은 운영체제의 핵심 서비스를 담당하는 부분입니다. 모든 운영체제는 반드시 하나의 커널을 가지고 있어야 하며, 가볍게 이해하기 위해선 운영체제 = 커널로 이해해도 무방하다고 생각합니다.
커널이 아닌 운영체제 구성 요소
물론, 운영체제 요소이긴 하지만, 아래와 같이 커널과는 다른 구성요소가 존재합니다.
- GUI(Graphical User Interface): 윈도우의 바탕화면, macOS의 Finder 같은 그래픽 인터페이스
- CLI(Command Line Interface): Windows의 명령 프롬프트, Linux의 터미널 같은 명령줄 인터페이스
이러한 인터페이스는 사용자의 편의를 위한 것으로, 커널의 핵심 기능은 아닙니다.
✅이중 모드(Dual Mode)와 시스템 호출
이중 모드란?
CPU가 명령어를 실행하는 모드를 사용자 모드(User Mode)와 커널 모드(Kernel Mode) 두 가지로 구분하는 메커니즘입니다.
사용자 모드 (User Mode)
- 일반 응용프로그램이 실행되는 모드
- 운영체제 서비스를 직접 이용할 수 없음
- 하드웨어 자원에 직접 접근 불가
- 보안과 안정성을 위한 제한된 권한
커널 모드 (Kernel Mode)
- 운영체제가 실행되는 모드
- 모든 하드웨어 자원에 접근 가능
- 시스템의 모든 명령어 실행 가능
- 메모리의 모든 영역 접근 가능
왜 이중 모드가 필요한가?
만약 모든 프로그램이 하드웨어에 직접 접근할 수 있다면, 아래와 같은 문제점들이 발생할 수 있습니다.
- 악의적인 프로그램이 시스템을 파괴할 수 있음
- 프로그램 간 자원 충돌 발생
- 시스템 안정성 저하
✅시스템 호출(System Call)
시스템 호출은 응용프로그램이 운영체제의 서비스를 요청하는 메커니즘입니다. 사용자 모드에서 커널 모드로 전환되는 유일한 방법입니다.
시스템 호출의 작동 과정
- 응용프로그램이 파일을 읽으려고 시도
- 시스템 호출 명령어 실행 (예: read())
- 소프트웨어 인터럽트 발생
- CPU가 사용자 모드 → 커널 모드로 전환
- 운영체제가 파일 읽기 작업 수행
- 결과를 응용프로그램에 반환
- CPU가 커널 모드 → 사용자 모드로 복귀
시스템 호출/(System Call) 예시
// C언어에서의 파일 읽기 시스템 호출
int fd = open("file.txt", O_RDONLY); // 파일 열기
read(fd, buffer, size); // 파일 읽기 (시스템 호출)
close(fd); // 파일 닫기
위 코드에서 open(), read(), close()는 모두 시스템 호출입니다.
주요 시스템 호출 카테고리
- 프로세스 제어: fork(), exit(), wait()
- 파일 관리: open(), read(), write(), close()
- 장치 관리: ioctl(), read(), write()
- 정보 유지: getpid(), alarm(), sleep()
- 통신: pipe(), shmget(), mmap()
✅인터럽트(Interrupt)
시스템 호출은 소프트웨어 인터럽트의 일종입니다. 인터럽트는 크게 두 가지로 분류됩니다.
하드웨어 인터럽트
- 입출력 장치(키보드, 마우스, 디스크)에 의해 발생
- 비동기적으로 발생
- 예: 키보드 입력, 네트워크 패킷 도착
소프트웨어 인터럽트 (Trap/Exception)
- 프로그램 실행 중 특정 명령어에 의해 발생
- 동기적으로 발생
- 시스템 호출: 의도적으로 발생시킨 인터럽트
- 예외(Exception): 0으로 나누기, 잘못된 메모리 접근 등
마치며
사실, 운영체제의 개념을 모른다고 해서 컴퓨터 운용과정 혹은 개발 단계에서 큰 문제는 발생되지 않는다고 생각합니다. 하지만 일상속에선 갑자기 컴퓨터가 에러를 뱉으며 강제종료가 되는 경우라던지, 혹은 실무에서 인프라를 관리할 때와 추후에 배울 스레드 동시성을 원활하게 이해하고 제어하기 위해서 불가피한 학습 과정이라고 생각하며 글을 정리하게 되었습니다.
📚참고 자료
'[CS]' 카테고리의 다른 글
| OS - C:\Windows\System32\drivers\etc 의 hosts 파일 면밀분석 (3) | 2025.08.20 |
|---|---|
| 네트워크 - 웹 브라우저에 www.google.com을 치면 어떤일이 일어날까? (0) | 2024.09.08 |