운영체제란 무엇인가: 자원 관리·추상화·보호의 세 역할

반응형

운영체제(Operating System)는 응용 프로그램과 하드웨어 사이에서 자원을 관리하고, 사용하기 쉬운 인터페이스를 제공하며, 실행 중인 프로그램을 서로 격리하는 소프트웨어다. Linux나 Windows 같은 운영체제를 단순히 화면이나 명령어 환경으로만 보면 핵심 역할을 놓치기 쉽다.

운영체제의 범위는 문맥에 따라 다르다. 좁게는 권한 있는 모드에서 CPU·메모리·장치를 다루는 커널을 가리키고, 넓게는 시스템 라이브러리와 서비스, 사용자 도구까지 포함한다. 이 글에서는 커널이 맡는 기본 역할을 중심으로 본다.

운영체제는 하드웨어를 추상화한다

응용 프로그램이 저장 장치의 섹터 위치나 네트워크 카드의 레지스터를 매번 직접 다뤄야 한다면 프로그램은 장치마다 달라져야 한다. 운영체제는 하드웨어의 세부 차이를 감추고, 더 안정적인 추상화를 제공한다.

대표적인 추상화는 다음과 같다.

하드웨어·자원 운영체제가 제공하는 대표 추상화
CPU 실행 시간 프로세스와 스레드
물리 메모리 프로세스별 가상 주소 공간
저장 장치 파일과 디렉터리
네트워크 장치 소켓
각종 장치 파일 디스크립터, 장치 드라이버 인터페이스

예를 들어 프로그램은 파일을 읽을 때 디스크 헤드의 위치를 계산하기보다 파일 디스크립터와 read 같은 인터페이스를 사용한다. Linux의 VFS는 여러 파일시스템이 같은 사용자 공간 인터페이스를 제공하도록 중간 계층을 둔다.

추상화가 모든 비용을 없애는 것은 아니다. 파일 접근은 캐시 적중 여부와 저장 장치, 메모리 압박에 따라 지연이 크게 달라진다. 그래서 “디스크는 메모리보다 몇 배 느리다”처럼 하나의 고정 비율로 설명하기보다 실제 워크로드와 계층을 측정해야 한다.

운영체제는 제한된 자원을 배분한다

여러 프로그램이 동시에 실행되는 것처럼 보여도 CPU 코어 수, 물리 메모리와 I/O 대역폭은 유한하다. 운영체제는 경쟁하는 작업에 자원을 배분한다.

  • CPU 스케줄링: 실행 가능한 작업 가운데 어느 작업을 언제 CPU에서 실행할지 정한다.
  • 메모리 관리: 가상 주소를 물리 메모리에 매핑하고, 페이지 회수와 캐시를 관리한다.
  • I/O 관리: 장치 드라이버와 인터럽트, 큐를 통해 장치 요청을 처리한다.
  • 파일시스템 관리: 이름, 권한, 캐시와 영속 저장 구조를 다룬다.
  • 네트워크 관리: 소켓 인터페이스 아래에서 프로토콜 처리와 패킷 송수신을 수행한다.

여기서 효율성과 공정성은 하나의 절대 기준이 아니다. 대화형 응답성을 높이는 정책과 배치 처리량을 높이는 정책은 다른 결과를 낼 수 있다. 스케줄러와 메모리 관리 정책도 운영체제와 버전, 설정에 따라 달라진다.

시스템 콜은 커널에 작업을 요청하는 경계다

일반 응용 프로그램은 커널 메모리나 장치에 임의로 접근할 수 없다. 파일을 열거나 프로세스를 만들고 네트워크로 데이터를 보낼 때 운영체제가 제공하는 시스템 콜 경계를 통과한다.

Linux에서는 대개 프로그램이 시스템 콜을 직접 호출하기보다 C 라이브러리 같은 래퍼 함수를 거친다. 라이브러리 함수와 시스템 콜은 같은 말이 아니다. 라이브러리 함수가 사용자 공간에서 일을 끝낼 수도 있고, 하나 이상의 시스템 콜을 선택해 호출할 수도 있다.

응용 프로그램
  → 언어 런타임·시스템 라이브러리
  → 시스템 콜 경계
  → 커널의 스케줄러·메모리·VFS·네트워크·드라이버
  → 하드웨어

시스템 콜은 단순한 함수 호출보다 큰 의미가 있다. 사용자 모드에서 커널 모드로 통제된 전환을 만들고, 커널은 인자와 접근 권한을 검사한 뒤 요청을 처리한다.

보호와 격리가 운영체제의 안전선을 만든다

운영체제는 프로그램마다 가상 주소 공간과 권한 경계를 제공한다. 한 프로세스의 잘못된 메모리 접근이 다른 프로세스의 메모리를 마음대로 바꾸지 못하게 하고, 파일 권한과 사용자 ID로 자원 접근을 제한한다.

물론 격리는 완벽한 보안을 자동으로 보장하지 않는다. 커널 취약점, 과도한 권한, 잘못된 설정은 경계를 무너뜨릴 수 있다. 컨테이너도 별도 커널을 갖는 가상 머신과 달리 호스트 커널을 공유하므로, 네임스페이스와 cgroup, 보안 정책이 함께 필요하다.

프로세스 상태는 구현별 이름보다 전이를 본다

운영체제 입문에서는 프로세스를 실행 중, 실행 가능, 대기 같은 상태로 나눈다. 개념적으로는 다음 전이가 중요하다.

실행 가능 → CPU 배정 → 실행 중
실행 중 → I/O·이벤트 대기 → 대기
대기 → 이벤트 완료 → 실행 가능

실제 상태 이름과 세부 단계는 운영체제마다 다르다. Linux 도구가 표시하는 문자 하나를 교과서의 상태표와 일대일로 맞추기보다, 작업이 CPU를 기다리는지, I/O를 기다리는지, 중단됐는지를 확인하는 편이 정확하다.

CPU와 메모리를 하드웨어 관점에서 먼저 보고 싶다면 CPU와 메모리의 기본 관계를, Linux가 실행 단위를 다루는 관점은 CPU·Linux task·goroutine 구분을 함께 볼 수 있다.

결국 운영체제의 핵심은 세 문장으로 정리할 수 있다. 하드웨어를 쓰기 쉬운 형태로 추상화하고, 한정된 자원을 여러 작업에 배분하며, 프로그램과 사용자 사이에 보호 경계를 만든다.

참고 자료

반응형
KEEP READING
카테고리 전체 보기 →

댓글