Skip to content

Commit e40c55b

Browse files
committed
operatingSystem: 운영체제란?
1 parent 68eb81a commit e40c55b

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# 운영 체제(Operating System)란?
2+
운영 체제(OS, Operating System)는 컴퓨터 시스템의 자원들(하드웨어_CPU, RAM, 저장장치, 네트워크 등)을 효율적으로 관리하며, 이를 통해 다른 응용 프로그램들이 자원을 효과적으로 사용할 수 있게 해준다. 운영체제 또한 소프트웨어이며, 소프트웨어의 목적인 사용자와 하드웨어 사이에 인터페이스를 제공해 사용자가 쉽게 컴퓨터를 다룰 수 있게 해준다.
3+
4+
즉, 운영체제란 **사용자와 응용프로그램이 편리하고 효과적으로 컴퓨터 시스템의 자원을 사용할 수 있도록 환경을 제공해주는 시스템 소프트웨어이다.**
5+
6+
# 커널
7+
8+
운영체제의 코어(핵심) 부분을 **커널(Kernel)**이라고 하는데, 일반적으로는 커널에 여러가지 기능(라이브러리, 시스템 프로그램 등)을 포함한 전체 상태를 운영체제라고 한다.
9+
10+
**커널은 하드웨어 자원을 관리하고, 앱에게 추상화된 인터페이스를 제공하는 관리자이다. (프로세스/메모리/IO/네트워크/드라이버 관리 수행)**
11+
12+
## 유저 모드 / 커널 모드
13+
14+
운영체제는 앱(응용프로그램, 이후부터 앱으로 통일.)이 컴퓨터를 쓰게 해주되, 망치지는 못하게 막아야 한다. 이를 위해서 권한을 나누었는데 이를 유저 모드와 커널 모드로 나누었다.
15+
16+
- **유저 모드(User mode)**: 제한된 권한 (안전)
17+
- **커널 모드(Kernel mode)**: 모든 권한 (위험하지만 필요)
18+
19+
### 유저 모드(User Mode)
20+
21+
앱이 제한된 권한으로 실행되는 CPU 실행 모드이다.
22+
23+
즉, 앱은 OS가 허용한 범위 안에서만 작동할 수 있으며 이로인해 시스템 전체가 망가지지 않게 된다.
24+
25+
- 하드웨어에 직접 접근 ❌
26+
- 다른 앱 메모리 접근 ❌
27+
- 커널 메모리 접근 ❌
28+
- 위험한 명령 실행 ❌
29+
30+
이 행동들을 할 수 있다면 보안이나 안정성이 박살날 것이다.
31+
32+
그러나 앱을 이용해보면 파일 저장, 네트워크, 카메라, 마이크 등을 사용하는 것을 알 수 있다.
33+
34+
이 때 **시스템 콜(System Call)** 을 통해 커널에게 요청하게 된다.
35+
36+
즉, 흐름을 보면
37+
38+
1. 앱이 시스템 콜을 호출
39+
2. CPU가 “유저 모드 → 커널 모드”로 전환
40+
3. 커널이 실제 작업 수행
41+
4. 다시 “커널 모드 → 유저 모드”로 복귀
42+
5. 앱이 결과를 받음
43+
44+
시스템 콜에 대해서는 이 후에 더 자세하게 다루겠다.
45+
46+
그렇다면 다른 앱 메모리 접근은 어떻게 막을까?
47+
48+
이 때 가상 메모리(Virtual Memory)를 사용하게 된다. 짧게 각 앱은 자신만의 주소 공간(가상 메모리)를 갖게 되어 다른 앱의 주소공간에 접근하지 못하게 된다.
49+
50+
이 부분도 이 후에 더 자세하게 다루겠다.
51+
52+
### 커널 모드(Kernel Mode)
53+
54+
커널이 실행되는 모드로 모든 권한을 갖는다. 그렇기 때문에 커널에서 버그가 난다면 OS 전체가 죽게된다.
55+
56+
- CPU/메모리/디스크/네트워크 등 모든 자원 접근 가능 ✅
57+
- 하드웨어 I/O 수행 가능 ✅
58+
- 모든 프로세스 관리 가능 ✅
59+
60+
위에서 얘기 했듯, 앱은 유저 모드에서 실행되지만 파일 읽기, 네트워크 통신 같은 기능을 위해 커널에 요청하는 방법으로 시스템 콜(System Call)이 있다.
61+
62+
**예시**
63+
64+
- `open()`, `read()`, `write()` (파일 I/O)
65+
- `socket()`, `send()`, `recv()` (네트워크)
66+
- 프로세스 관련 호출
67+
68+
<aside>
69+
📌 iOS 개발자 관점에서는 직접 시스템 콜을 직접 부르는 경우는 자주 없지만, UIKit/Swift API 내부에서는 결국 시스템 콜로 내려간다.
70+
</aside>
71+
72+
> 커널은 커널 모드에서 동작하며, 앱은 유저 모드에서 실행된다. 앱이 권한이 필요한 작업(I/O 등)을 수행하려면 시스템 콜을 통해 커널에 요청한다.
73+
>
74+
75+
# 운영체제의 역할
76+
77+
## 프로세스 관리
78+
79+
운영체제에서 작동하는 앱(프로그램)을 관리하는 기능으로 다른 의미로는 CPU를 관리하는 것으로 볼 수도 있다.
80+
81+
현재 CPU를 점유해야 할 프로세스를 결정하고, 실제로 CPU를 프로세스에 할당하며, 이 프로세스 간 공유 자원 접근과 통신 등을 관리하게 된다.
82+
83+
- 프로세스, 스레드
84+
- 스케줄링
85+
- 동기화
86+
- IPC 통신
87+
88+
관련 내용들을 운영체제 학습하면서 더 다루게 될 것이다.
89+
90+
## 저장장치 및 메모리 관리
91+
92+
메인 메모리와 저장장치에 해당하는 하드디스크, NAND 등을 관리하는 기능이다.
93+
94+
- 메모리 관리(Memory Management)
95+
- 1차 저장장치(Main Memory, RAM)
96+
- 프로세스에 할당하는 메모리 영역의 할당과 해제
97+
- **가상 메모리**
98+
- 각 메모리 영역 간의 침범 방지 + 메인 메모리의 효율적 활용
99+
- 저장장치 관리(Storage)
100+
- 2차 저장장치(HDD, NAND Flash Memory 등)
101+
- 파일 형식의 데이터 저장
102+
- 디스크 I/O 요청을 처리하고 관리(I/O scheduling, buffering 등)
103+
- 이런 파일 데이터 관리를 위한 **파일 시스템**을 OS에서 관리
104+
- `FAT, NTFS, EXT2, JFS, XFS` 등 많은 파일 시스템들이 개발되어 사용 중
105+
106+
<aside>
107+
📌 iOS에서는 **샌드박스(Sandbox)** 를 통해 앱마다 파일 접근을 제한하여, 다른 앱의 저장 영역을 접근할 수 없도록 격리한다.
108+
109+
</aside>
110+
111+
## 네트워킹
112+
113+
TCP/IP 기반의 인터넷에 연결하거나, 응용 프로그램이 네트워크를 사용하려면 **운영체제(커널)가 네트워크 스택을 제공**해야 한다.
114+
115+
> **네트워크 스택(Network Stack)**은 운영체제가 TCP/IP 등 네트워크 프로토콜을 계층 구조로 구현한 것으로, 응용 프로그램은 소켓/네트워크 API를 통해 이를 사용하여 통신할 수 있다.
116+
(응용 프로그램은 보통 URLSession 같은 고수준 API를 사용하지만, 내부적으로는 OS의 소켓 인터페이스(Socket API)와 네트워크 스택을 통해 통신이 수행된다.)
117+
>
118+
119+
운영체제는 네트워크 장치(Wi-Fi, Cellular 등)를 제어하고 프로세스가 네트워크 기능을 사용할 수 있도록 소켓(Socket) 기반 인터페이스(Socket API)를 제공한다.
120+
121+
또한 여러 프로세스가 동시에 네트워크를 사용하는 상황에서 **자원 관리, 성능 최적화, 보안 제어**를 수행해야 하기 때문에 운영체제에서 담당하게 된다.
122+
123+
## 사용자 관리(User/Permission/Security)
124+
125+
하나의 컴퓨터에서 여러 사람이 이용하는 경우가 있다. 그렇기 때문에 각 사용자의 계정을 관리할 수 있는 기능이 필요하다. 사용자 별로 프라이버시와 보안을 위해 파일에 대해 접근 제한을 지원해야한다.
126+
127+
또한 운영체제는 앱이 다른 앱 데이터를 읽거나, 다른 정보들을 추적하거나 하면 안되기 때문에 권한이 없으면 실행 자체를 못 하게 강제하도록 한다.
128+
129+
### iOS
130+
131+
<aside>
132+
📌
133+
iOS는 macOS/Linux 처럼 다중 사용자 OS가 아니기 때문에 **보안과 권한 관리**를 더 중요시 한다.
134+
135+
</aside>
136+
137+
- Sandbox
138+
- Permission
139+
- 카메라
140+
- 마이크
141+
- 사진첩
142+
- 등등의 접근
143+
144+
## 디바이스 드라이버(Device Drivers)
145+
146+
운영체제는 시스템의 자원, 하드웨어를 관리한다. 여러 하드웨어들을 운영체제에서 인식하고 관리하게 만들어 응용 프로그램이 하드웨어를 사용할 수 있게 만들어야 한다. 따라서, 운영체제 안에 하드웨어를 추상화 해주는 계층이 필요하다. 이 계층이 바로 **디바이스 드라이버(Device Driver)**라고 불린다. 하드웨어의 종류가 많은 만큼, 운영체제 내부의 디바이스 드라이버도 많이 존재한다.
147+
148+
> **“디바이스 드라이버” → 운영체제가 여러 브랜드/모델의 하드웨어들을 통일된 방식으로 사용하기 위한 통역사**
149+
>
150+
151+
하드웨어를 직접 제어하는 것은 위험하다. 잘못 동작할 경우 운영체제 안정성을 해치거나 보안 문제가 발생할 수 있기 때문이다. 그렇기 때문에 일반적으로 커널 공간에서 동작하며 높은 권한을 가진 코드로 실행된다.
152+
153+
<aside>
154+
📌
155+
156+
iOS는 제조사가 Apple이라 하드웨어와 운영체제가 긴밀하게 설계되어 드라이버 호환성이 비교적 단순한 편이다.
157+
158+
그럼에도 운영체제의 핵심 구조는 그대로 갖고있다. (앱은 하드웨어에 직접 접근하지 않고, 운영체제가 제공하는 API를 통해 간접적으로 사용.)
159+
160+
</aside>
161+
162+
---
163+
164+
> 즉, 운영체제의 역할은 한정된 모든 자원을 여러 프로그램이 공유하는 상황에서 **충돌을 방지하고, 보안을 지키며, 성능을 최적화**하는 것이다. **자원 추상화(쉽게 쓰기), 보호(안전하게 통제)**
165+
>

0 commit comments

Comments
 (0)