운영체제는 특별한 프로그램이다.
대표적으로
- 데스크탑 : 윈도우 ,맥OS,리눅스
- 스마트폰 : iOS , 안드로이드
등이 있다. 매우 다양한 종류,다양한 기능이 있지만 핵심적인 기능은 비슷하다.
커널 : 운영체제의 핵심 기능을 담당하는 부분 (자동차 엔진 같은 곳)
운영체제의 두가지 핵심 기능
1. 자원 할당 및 관리
- 프로세스와 스레드
- 동기화와 교착 상태
2.프로세스 및 스레드 관리 (뒤에 자세히 다룸)
- 프로세스 : 실행중인 프로그램 실행 중인 프로그램의 독립적인 작업 단위로, 자신만의 메모리 공간을 가짐 (OS가 할당) ex ) 크롬의 탭 하나
- 쓰레드 : 이 프로세스를 이루는 실행 단위
- 쓰레드는 같은 프로세스의 메모리를 공유 함.
- 프로세스 A ( 쓰레드 a , 쓰레드 b ~~~)
- 하드웨어적 개념 : 한 코어에서 동시에 실행 될 수 있는 소프트웨어 스레드 수 ex ) 2코어 4쓰레드
- 소프트웨어적 개념 : 프로세스 내에서 실행되는 개별 실행 단위
- 쓰레드는 같은 프로세스의 메모리를 공유 함.
운영체제의 역할
- CPU,메모리,보조기억장치 등의 컴퓨터 부품 접근 , 각 부품들이 효율적으로 사용되도록 관리
- 응용프로그램에게 자원을 할당
자원이란?
프로그램 실행에 마땅히 필요한 요소 ( 소프트웨어 , 하드웨어 )
1. CPU 스케줄링
운영체제가 여러 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 결정하는 과정
멀티태스킹 환경이 아니면 CPU는 한번의 하나의 프로세스만 실행 가능 → 효율적으로 분배해야 함
CPU 스케줄링 필요한 이유
- CPU 활용을 극대화
- 공정한 자원 분배
- 응답 시간 최소화
- 처리량(Throughput) 극대화
- 대기 시간 최소화
CPU 스케줄링 종류
- 비선점(Non-preemptive) 스케줄링
- 한 번 CPU를 할당받은 프로세스가 자신의 작업이 끝날 때까지 CPU를 점유
- 중간에 다른 프로세스가 CPU를 빼앗을 수 없음
- 선점(Preemptive) 스케쥴링
- 운영체제가 특정 조건에서 CPU를 강제로 회수 , 다른 프로세스에 할당 가능
- 실시간 시스템이나 멀티 태스킹 환경에서 주로 사용 됨
2.가상 메모리
메모리 새롭게 실행하는 프로그램을 메모리에 적재, 종료된 프로그램은 메모리 삭제한다.
3. 파일 시스템
파일 시스템 : 보조기억 장치 내의 정보를 파일 및 폴더(디렉토리) 단위로 접근&관리 할 수 있도록 만드는 운영체제 내부 프로그램
+운영체제의 입출력장치 및 캐시 메모리 관리 운영체제는 일부 입출력장치의 장치 드라이버 , 하드웨어 인터럽트 서비스 루틴을 제공하거나 캐시 메모리의 일관성을 유지하는 등의 기능을 제공한다.
시스템 콜과 이중 모드
운영체제도 일종의 프로그램이기 때문에 프로그램이 실행 되기 위해선 반드시 메모리에 적재되어야 한다.
1️⃣ 시스템 콜 (System Call)
📌 사용자 프로그램이 운영체제(OS)의 기능을 요청하는 인터페이스
- 사용자 영역(User Space)에서 실행되는 프로그램은 직접 하드웨어를 제어할 수 없음.
- 대신, **운영체제(커널)**에 요청해야 하는데, 이때 시스템 콜을 사용함.
✅ 사용자 프로그램이 시스템 콜을 호출 하면,
✅ CPU가 사용자 모드 → 커널 모드로 전환 됨 (Mode Switching)
✅ 운영체제(OS)가 필요한 작업을 수행 (파일 열기, 메모리 할당, 네트워크 요청 등)
✅ 작업이 끝나면 CPU가 다시 커널 모드 → 사용자 모드로 전환하고,
✅ 결과를 사용자 프로그램에 돌려줌
즉, 사용자 프로그램이 커널 모드를 직접 빌려서 실행하는 게 아니라, 운영체제가 대신 작업을 처리해주는 구조
💡 정리하면?
"사용자 모드 = 일반인, 커널 모드 = 보안 구역"
- 사용자는 보안 구역에 직접 들어갈 수 없음
- 보안 구역에 있는 정보를 얻으려면 직원이 대신 작업해줘야 함
- 시스템 콜은 "직원에게 요청하는 과정"
- 요청이 들어오면 직원이 보안 구역(커널 모드)에서 대신 작업
- 끝나면 다시 일반 구역(사용자 모드)로 돌아옴
💡 그래서 "빌려온다"기보다는, "운영체제에게 요청해서 대신 처리해달라고 한다"가 정확한 표현
✅ 예시
기능 시스템 콜
파일 관리 | open(), read(), write(), close() |
프로세스 관리 | fork(), exec(), wait(), exit() |
메모리 관리 | mmap(), brk() |
네트워크 | socket(), connect(), bind(), listen(), accept() |
시스템 콜을 새끼를 낳는다.
fork() 시스템 콜을 통해 알 수 있듯 프로세스는 시스템 콜을 통해 또 다른 프로세스 생성 , 그 밑으로 또 생성 가능
- 부모프로세스 - 생성한 새 프로세스
- 자식 프로세스 - 부모 프로세스에 의해 생성 된 프로세스
💾 커널 영역(Kernel Space) vs 사용자 영역(User Space) 차이점
구분 커널 영역 (Kernel Space) 사용자 영역 (User Space)
설명 | OS 핵심 부분이 실행되는 공간 | 사용자 애플리케이션이 실행되는 공간 |
권한 | 높은 권한 (Supervisor Mode) | 제한된 권한 (User Mode) |
접근 가능 자원 | 하드웨어 직접 접근 가능 (CPU, 메모리, 디스크, 네트워크 등) | 하드웨어 직접 접근 불가, OS API를 통해 접근 |
안정성 | 하나가 오류 나면 전체 시스템에 영향 | 오류가 나도 다른 프로세스에는 영향 없음 |
운영체제 서비스 | 제공 O | 제공 X |
예시 | 드라이버, 파일 시스템, 프로세스 관리 | 웹 브라우저, 게임, 문서 편집기 |
2️⃣ 이중 모드 (Dual Mode)
📌 CPU가 두 가지 실행 모드를 가지는 개념 - 그러니까 두개로 나눴다는 거임. 별 의미 없음
- 사용자 모드 (User Mode): 일반 프로그램 실행 (제한된 권한)
- 커널 모드 (Kernel Mode): 운영체제 실행 (모든 권한)
이중 모드가 필요한 이유?
- 사용자가 운영체제 핵심 기능을 마음대로 건드릴 수 없도록 보호하기 위해.
- 예를 들어, 메모리, 파일 시스템, 프로세스 관리 등은 커널 모드에서만 변경 가능.
모드 전환 과정
- 프로그램 실행 (User Mode)
- 시스템 콜 호출 (read(), write() 등)
- CPU가 커널 모드로 전환 후 시스템 콜 처리
- 완료되면 다시 사용자 모드로 복귀
💡 정리하면?
- 시스템 콜을 통해 사용자 프로그램이 운영체제 기능을 사용할 수 있음.
- 이중 모드를 통해 보안과 안정성을 보장.
컴퓨터 내부에서 시스템 콜이 호출되면?
S/W 인터럽트 발생 → CPU의 커널모드 전환 → 운영체제 코드 실행 → 사용자 모드로 재전환
📌 S/W 인터럽트(Software Interrupt)
- 프로그램이 명령어를 실행하면서 발생하는 인터럽트로, **시스템 콜(System Call)**을 호출할 때 사용됨.
- 사용자 모드 → 커널 모드 전환을 위해 활용되며, OS가 특정 작업(파일 입출력, 프로세스 관리 등)을 수행하도록 요청함.
- 하드웨어 인터럽트(외부 신호로 발생)와 달리, 소프트웨어가 직접 발생시킴.
- 예시: int 0x80 (리눅스 시스템 콜), syscall 명령어.
- 목적: 사용자 프로그램이 직접 접근할 수 없는 OS 기능을 안전하게 실행.
시스템 콜이 이 소프트웨어 인터럽트 일종임
- 사용자 영역을 실행하는 과정에서 시스템콜 호출 → CPU는 현 작업 백업
- 커널 영역 내의 인터럽트 처리하기 위한 코드
- 사용자 영역의 코드 실행을 재개함
'Study > CS' 카테고리의 다른 글
03-3 동기화와 교착 상태 (0) | 2025.02.12 |
---|---|
03-2 프로세스와 스레드 (1) | 2025.02.12 |
02-5 보조기억장치와 입출력 장치 (0) | 2025.02.05 |
02-4 메모리 (0) | 2025.02.05 |
02-3 CPU (0) | 2025.02.05 |