[1과목 1장 01절] 운영체제의 역할과 커널·셸·응용 프로그램 3계층 구조, 리눅스의 특징과 장단점, 유닉스와의 관계를 다룹니다.
🎯 이 강의 학습 목표
이 강은 1과목 리눅스 일반 · 1장 리눅스의 이해 · 01절 리눅스 개요에 해당합니다. 이 강을 마치면 운영체제가 컴퓨터에서 무슨 일을 하는지 설명할 수 있고, 커널·셸·응용 프로그램 3계층 구조에서 각 층의 역할과 경계를 구분할 수 있으며, 리눅스의 특징을 다중 사용자·다중 작업·다중 처리·이식성 같은 시험 용어로 정확히 말할 수 있게 됩니다.
이 단원은 개념만 나오기 때문에 쉬워 보이지만, 실제로는 용어 하나를 바꿔 끼운 함정 선지가 가장 많이 나오는 곳입니다. 예를 들어 "리눅스는 대부분 어셈블리어로 작성되었다" 같은 문장은 한 단어만 틀렸는데 오답입니다. 그래서 이 강에서는 각 특징을 말로만 외우지 않고 실제 명령어 출력으로 확인하면서 진행합니다.
💡 운영체제는 무슨 일을 하는가
운영체제(OS, Operating System)는 하드웨어와 사용자·응용 프로그램 사이에서 중재하는 시스템 소프트웨어입니다. 컴퓨터에는 CPU 하나에 프로그램 수십 개가 동시에 돌아가고, 메모리는 한정되어 있으며, 디스크와 네트워크 카드는 여러 프로그램이 동시에 쓰려 합니다. 이 충돌을 프로그램마다 알아서 해결하라고 하면 시스템이 성립하지 않습니다. 그래서 자원을 독점적으로 관리하는 한 층을 두는데 그것이 운영체제입니다.
운영체제가 맡는 일은 크게 네 가지로 정리됩니다. 첫째, 프로세스 관리입니다. 어떤 프로그램에 CPU를 얼마나 줄지 결정하고(스케줄링), 프로그램을 만들고 없애며, 프로그램끼리 통신하게 합니다. 둘째, 메모리 관리입니다. 각 프로그램에 메모리 공간을 나눠 주고 서로 침범하지 못하게 보호하며, 물리 메모리가 모자라면 디스크를 메모리처럼 쓰는 가상 메모리를 제공합니다. 셋째, 파일 시스템 관리입니다. 디스크의 물리적 위치를 감추고 사용자에게는 디렉터리와 파일이라는 일관된 모습으로 보여 줍니다. 넷째, 장치 관리입니다. 키보드·디스크·프린터·네트워크 카드 같은 서로 다른 장치를 장치 드라이버를 통해 통일된 방식으로 다루게 해 줍니다.
이 네 가지를 실제로 수행하는 핵심 부분에 붙는 이름이 커널입니다. 그리고 엄밀히 말하면 리눅스라는 이름은 원래 이 커널만 가리킵니다. 우리가 설치해서 쓰는 우분투나 CentOS는 커널에 각종 도구와 응용 프로그램을 묶은 배포판입니다. 시험에서 "리눅스는 커널을 의미한다"는 서술이 나오면 맞는 설명입니다.
💡 커널·셸·응용 프로그램 3계층 구조
리눅스 시스템은 안쪽부터 하드웨어 → 커널 → 셸 → 응용 프로그램 순으로 층을 이룹니다. 이 구조를 양파 껍질에 비유하는 이유는 바깥층이 안쪽층을 직접 건너뛸 수 없기 때문입니다.
| 계층 | 역할 | 구체적인 예 |
|---|---|---|
| 하드웨어 | 실제 연산·저장·입출력을 수행 | CPU, 메모리, 디스크, 네트워크 카드 |
| 커널 | 자원 관리의 핵심. 프로세스·메모리·파일 시스템·장치 관리 | 리눅스 커널(vmlinuz), 장치 드라이버, 커널 모듈 |
| 셸 | 사용자 명령을 해석해 커널에 전달하는 명령 해석기 | bash, csh, ksh, zsh |
| 응용 프로그램 | 사용자가 목적을 달성하기 위해 쓰는 프로그램 | vi, Apache, Firefox, LibreOffice |
셸의 위치를 정확히 이해하는 것이 중요합니다. 셸은 커널의 일부가 아니라 커널 위에서 도는 하나의 프로그램입니다. 그래서 마음에 들지 않으면 bash 대신 zsh로 교체할 수 있습니다. 반대로 커널은 시스템에 하나뿐이고 교체하려면 재부팅이 필요합니다. "셸은 교체 가능하고 커널은 그렇지 않다"는 대비가 시험에서 자주 쓰이는 구분점입니다.
사용자가 ls를 입력했을 때 벌어지는 일을 따라가면 계층 관계가 분명해집니다. 셸이 입력을 받아 해석하고, /usr/bin/ls라는 프로그램을 실행합니다. 그 프로그램이 디렉터리를 읽으려면 직접 디스크에 접근할 수 없으므로 커널에 시스템 호출(system call)을 합니다. 커널이 파일 시스템을 통해 디스크에서 정보를 읽어 되돌려 주고, 그 결과가 화면에 출력됩니다. 응용 프로그램과 커널 사이의 공식 통로가 시스템 호출이라는 점을 기억해 두면 뒤에 나올 프로세스 단원이 수월해집니다.
리눅스 커널은 구조상 모놀리식 커널(monolithic kernel)로 분류됩니다. 파일 시스템·장치 드라이버·네트워크 처리 같은 기능이 하나의 커널 공간 안에 들어 있는 방식입니다. 다만 필요한 기능을 모듈로 만들어 실행 중에 올리고 내릴 수 있어서, 순수한 모놀리식 구조의 단점인 경직성을 보완합니다. 이와 대비되는 것이 커널을 최소한으로 줄이고 나머지를 사용자 공간으로 뺀 마이크로커널이며, 리눅스의 모태가 된 교육용 운영체제 미닉스(MINIX)가 그 방식이었습니다.
💡 리눅스의 특징 — 시험에 나오는 용어 그대로
리눅스의 특징은 시험에서 "다음 중 리눅스의 특징으로 옳은 것은/틀린 것은" 형태로 거의 매 회차 출제됩니다. 각 용어의 정확한 뜻을 짚고 갑니다.
- 다중 사용자(Multi-user) — 여러 사용자가 동시에 하나의 시스템에 접속해 작업할 수 있습니다. 사용자마다 계정과 홈 디렉터리, 권한이 분리됩니다.
- 다중 작업(Multi-tasking) — 한 사용자가 여러 프로그램을 동시에 실행할 수 있습니다. CPU를 아주 짧은 시간 단위로 나눠 번갈아 쓰기 때문에 동시에 도는 것처럼 보입니다.
- 다중 처리(Multi-processing) — CPU 또는 코어가 여러 개일 때 이를 모두 활용합니다. 다중 작업과 혼동하기 쉬운데, 다중 작업은 프로그램 수, 다중 처리는 CPU 수에 관한 말입니다.
- 이식성(Portability) — 커널 대부분이 C언어로 작성되어 하드웨어가 달라도 다시 컴파일하면 동작합니다. 하드웨어에 밀착된 극히 일부만 어셈블리어입니다. "대부분 어셈블리어"라는 서술은 오답입니다.
- 계층적 파일 시스템 — 최상위 루트(
/)에서 갈라지는 트리 구조 하나로 모든 장치와 파일을 표현합니다. 윈도우처럼 드라이브 문자로 분리되지 않습니다. - 가상 메모리 — 물리 메모리가 부족하면 디스크의 스왑(swap) 공간을 메모리처럼 씁니다.
- 오픈 소스 — 커널뿐 아니라 대부분의 응용 프로그램 소스가 공개되어 있고, 누구나 수정·재배포할 수 있습니다.
- 강력한 네트워크 지원 — TCP/IP를 비롯한 네트워크 기능이 커널에 내장되어 서버 운영체제로 널리 쓰입니다.
- POSIX 호환 — 유닉스 계열의 표준 인터페이스를 따르므로 유닉스용 프로그램을 옮기기 쉽습니다.
💻 실습으로 확인하기
말로 외운 특징을 실제 출력으로 확인해 보겠습니다. 아래는 WSL 우분투 24.04에서 실행한 결과입니다.
$ id
uid=1000(chung) gid=1000(chung) groups=1000(chung),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users)
$ uptime
20:30:11 up 1 day, 5:52, 2 users, load average: 5.00, 2.37, 1.08
id는 현재 사용자의 UID·GID와 소속 그룹을 보여 줍니다. 사용자마다 고유한 숫자 식별자가 붙어 있다는 것 자체가 다중 사용자 시스템이라는 증거입니다. uptime 출력의 2 users는 현재 접속 중인 사용자 수이고, load average는 최근 1분·5분·15분 동안의 평균 부하입니다.
$ ps -e --no-headers | wc -l
46
$ nproc
22
ps -e는 시스템의 모든 프로세스를 나열하고 wc -l은 줄 수를 셉니다. 사용자가 직접 띄운 프로그램은 몇 개 안 되는데 46개가 돌고 있습니다. 이것이 다중 작업입니다. nproc은 사용 가능한 CPU 코어 수를 출력하는데 22개입니다. 이 22개를 모두 활용하는 능력이 다중 처리입니다. 두 개념이 왜 다른지 이 두 출력으로 구분해 두면 헷갈리지 않습니다.
$ free -h
total used free shared buff/cache available
Mem: 15Gi 4.8Gi 8.0Gi 1.9Mi 3.0Gi 10Gi
Swap: 8.0Gi 626Mi 7.4Gi
free -h는 메모리 사용량을 사람이 읽기 좋은 단위로 보여 줍니다. 주목할 줄은 Swap입니다. 물리 메모리 15GiB와 별도로 스왑 8GiB가 잡혀 있고 626MiB가 실제로 쓰이고 있습니다. 물리 메모리가 남아 있는데도 스왑이 쓰인 이유는, 커널이 오래 쓰지 않은 페이지를 미리 디스크로 옮겨 두기 때문입니다. 이것이 가상 메모리가 동작하고 있다는 직접적인 증거입니다.
⚠️ 시험에 나오는 함정
이 단원에서 점수를 잃는 지점은 거의 정해져 있습니다. 혼동 쌍을 나란히 정리합니다.
| 혼동 쌍 | 구분 기준 |
|---|---|
| 다중 작업 vs 다중 처리 | 작업은 프로그램이 여러 개, 처리는 CPU가 여러 개 |
| 커널 vs 셸 | 커널은 자원 관리의 핵심이며 교체 불가, 셸은 명령 해석기이며 교체 가능 |
| 리눅스 vs 배포판 | 리눅스는 커널, 우분투·CentOS는 커널에 도구를 묶은 배포판 |
| 모놀리식 커널 vs 마이크로커널 | 리눅스는 모놀리식(모듈 지원), 미닉스는 마이크로커널 |
| C언어 vs 어셈블리어 | 커널 대부분은 C언어, 어셈블리어는 하드웨어 밀착부 일부 |
"틀린 것을 고르시오" 유형에서 자주 등장하는 오답 문장을 미리 알아 두면 유리합니다. "리눅스는 단일 사용자 시스템이다", "소스 코드가 공개되지 않아 수정할 수 없다", "특정 하드웨어에서만 동작한다", "대부분 어셈블리어로 작성되었다" — 이 네 가지는 리눅스의 핵심 특징을 정확히 뒤집은 문장이라 그대로 오답 선지로 쓰입니다.
💡 리눅스의 장점과 단점, 그리고 유닉스와의 관계
장점부터 보겠습니다. 비용 면에서 대부분의 배포판을 무료로 쓸 수 있고 라이선스 비용 부담이 없습니다. 안정성이 높아 재부팅 없이 장기간 운영할 수 있어 서버에 적합합니다. 보안성 측면에서는 소스가 공개되어 취약점이 빨리 발견되고 수정됩니다. 유연성도 큽니다. 불필요한 기능을 빼고 커널을 다시 구성할 수 있어 임베디드 기기부터 슈퍼컴퓨터까지 같은 커널을 씁니다. 하드웨어 요구가 낮아 오래된 장비에서도 동작합니다.
단점도 분명합니다. 기술 지원 주체가 명확하지 않은 경우가 있어 문제가 생기면 커뮤니티나 문서에 의존해야 합니다. 상용 배포판은 유료 지원 계약으로 이 문제를 해결합니다. 특정 상용 소프트웨어나 게임, 일부 주변기기 드라이버 지원이 부족할 수 있습니다. 그리고 명령어 기반 관리에 익숙해지는 데 시간이 걸린다는 점, 배포판마다 설정 방식이 달라 일관성이 떨어진다는 점도 흔히 지적됩니다.
유닉스와의 관계는 "닮았지만 혈연은 아니다"로 요약됩니다. 리눅스는 유닉스의 소스 코드를 물려받은 것이 아니라, 유닉스의 설계 사상과 인터페이스를 참고해 처음부터 새로 작성되었습니다. 그래서 유닉스 계열(Unix-like)이라고 부르되 정통 유닉스는 아닙니다. 아래 비교가 시험에서 쓰이는 구분입니다.
| 구분 | 유닉스(정통) | 리눅스 |
|---|---|---|
| 소스 공개 | 대부분 비공개(상용) | 공개(오픈 소스) |
| 비용 | 유료 라이선스 | 대부분 무료 |
| 하드웨어 | 특정 제조사 장비 중심 | 범용 PC 포함 폭넓은 지원 |
| 대표 제품 | AIX(IBM), HP-UX, Solaris | RHEL, 우분투, 데비안 |
| 표준 | UNIX 인증 | POSIX 호환(인증은 별개) |
📝 핵심 요약 — 암기표
| 항목 | 핵심 |
|---|---|
| 운영체제의 4대 관리 | 프로세스 · 메모리 · 파일 시스템 · 장치 |
| 계층 구조 | 하드웨어 → 커널 → 셸 → 응용 프로그램 |
| 셸의 정체 | 명령 해석기이자 교체 가능한 프로그램 |
| 응용↔커널 통로 | 시스템 호출(system call) |
| 커널 구조 | 모놀리식 + 동적 모듈 (미닉스는 마이크로커널) |
| 작성 언어 | 대부분 C언어, 일부 어셈블리어 → 이식성의 근거 |
| 다중 작업 vs 다중 처리 | 프로그램 여러 개 vs CPU 여러 개 |
| 리눅스의 원래 의미 | 커널. 우분투·CentOS는 배포판 |
| 유닉스와의 관계 | 소스 상속 아님. 설계 사상·인터페이스 계승(POSIX 호환) |
다음 3강에서는 이 리눅스가 어떻게 등장했는지, MULTICS에서 유닉스를 거쳐 1991년 리눅스 커널이 발표되기까지의 계보를 인물과 연도 중심으로 정리합니다.
📋 실전 문제
1. 다음 중 리눅스의 특징으로 틀린 것은?
① 다중 사용자 및 다중 처리 시스템이다.
② 커널 대부분이 어셈블리어로 작성되어 이식성이 뛰어나다.
③ 커널뿐 아니라 대부분의 응용 프로그램 소스도 공개되어 있다.
④ 다양한 파일 시스템을 지원한다.
2. 사용자가 입력한 명령을 해석해 커널에 전달하는 명령 해석기 역할을 하는 계층은?
① 커널 ② 셸 ③ 응용 프로그램 ④ 장치 드라이버
3. 리눅스 커널의 구조에 대한 설명으로 옳은 것은?
① 마이크로커널 구조이며 모듈을 지원하지 않는다.
② 모놀리식 커널 구조이며 동적으로 모듈을 적재·제거할 수 있다.
③ 하이브리드 커널 구조로 셸이 커널에 포함된다.
④ 커널이 없고 셸이 하드웨어를 직접 제어한다.
4. 다중 처리(Multi-processing)에 대한 설명으로 가장 적절한 것은?
① 한 사용자가 여러 프로그램을 동시에 실행하는 것
② 여러 사용자가 동시에 시스템에 접속하는 것
③ 여러 개의 CPU 또는 코어를 활용해 처리하는 것
④ 물리 메모리가 부족할 때 디스크를 메모리처럼 쓰는 것
5. 응용 프로그램이 커널의 기능을 사용하기 위해 호출하는 공식적인 인터페이스는?
① 셸 스크립트 ② 시스템 호출 ③ 장치 파일 ④ 환경 변수
6. 리눅스와 유닉스의 관계에 대한 설명으로 틀린 것은?
① 리눅스는 유닉스의 소스 코드를 그대로 상속받아 만들어졌다.
② 리눅스는 POSIX 표준과 호환된다.
③ 정통 유닉스는 대체로 상용이며 특정 제조사 장비 중심으로 쓰였다.
④ 리눅스는 유닉스 계열(Unix-like) 운영체제로 분류된다.
7. 다음 중 운영체제의 주요 기능에 해당하지 않는 것은?
① 프로세스 스케줄링 ② 가상 메모리 관리
③ 파일 시스템 관리 ④ 워드프로세서로 문서를 편집하는 기능
8. 현재 시스템에서 사용 가능한 CPU 코어 수를 확인하는 명령으로 가장 적절한 것은?
① free -h ② nproc ③ uptime ④ id
✅ 정답과 해설
1. 정답 ②
리눅스 커널은 대부분 C언어로 작성되었고 하드웨어에 밀착된 극히 일부만 어셈블리어입니다. 오히려 C언어로 작성되었기 때문에 다시 컴파일해 다양한 하드웨어로 옮길 수 있어 이식성이 높은 것입니다. ②는 원인을 정반대로 서술한 전형적인 함정 선지입니다. ①·③·④는 모두 옳습니다.
2. 정답 ②
셸이 명령 해석기입니다. ①의 커널은 자원 관리의 핵심으로 셸이 전달한 요청을 실제로 처리합니다. ③의 응용 프로그램은 셸이 실행시키는 대상이고, ④의 장치 드라이버는 커널 안에서 특정 장치를 제어하는 부분입니다.
3. 정답 ②
리눅스는 모놀리식 커널이면서 적재 가능한 커널 모듈을 지원해 실행 중에 기능을 붙이고 뗄 수 있습니다. ①은 마이크로커널이라는 점과 모듈 미지원이라는 점이 모두 틀렸고, 마이크로커널은 미닉스에 해당합니다. ③은 셸이 커널에 포함된다는 부분이 틀렸으며 셸은 커널 위의 프로그램입니다. ④는 계층 구조 자체를 부정하는 서술입니다.
4. 정답 ③
다중 처리는 CPU·코어가 여러 개일 때 이를 모두 활용하는 능력입니다. ①은 다중 작업(Multi-tasking), ②는 다중 사용자(Multi-user), ④는 가상 메모리에 대한 설명입니다. 네 개념이 한 문제에 섞여 나오는 경우가 많으므로 각각의 주어가 프로그램인지, 사용자인지, CPU인지, 메모리인지로 구분하십시오.
5. 정답 ②
응용 프로그램은 하드웨어에 직접 접근할 수 없고 시스템 호출을 통해 커널에 요청합니다. ①의 셸 스크립트는 명령을 모아 둔 파일이지 커널 인터페이스가 아니며, ③의 장치 파일은 커널이 장치를 파일 형태로 노출한 결과물, ④의 환경 변수는 셸의 동작 설정값입니다.
6. 정답 ①
리눅스는 유닉스의 소스 코드를 물려받지 않았습니다. 설계 사상과 인터페이스를 참고해 새로 작성되었기 때문에 유닉스 계열이라 부르되 정통 유닉스는 아닙니다. ②·③·④는 모두 옳은 설명입니다.
7. 정답 ④
문서 편집은 응용 프로그램의 기능이지 운영체제의 기능이 아닙니다. ①·②·③은 각각 프로세스 관리, 메모리 관리, 파일 시스템 관리로 운영체제의 핵심 기능입니다.
8. 정답 ②
nproc이 사용 가능한 처리 유닛(코어) 수를 출력합니다. ①의 free -h는 메모리와 스왑 사용량, ③의 uptime은 가동 시간·접속자 수·부하 평균, ④의 id는 사용자 UID·GID와 그룹을 보여 줍니다. 더 자세한 CPU 정보는 lscpu나 /proc/cpuinfo에서 확인할 수 있습니다.
📚 참고 자료
관련 주제
- 운영체제
- 커널
- 셸
- 다중 사용자
- 다중 작업
- 이식성
- 모놀리식 커널
- POSIX
- 자격증
- 자격증 강의
- 리눅스마스터 2급 완전정복
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
리눅스마스터 2급 완전정복
이 강의가 속한 시리즈는 총 9강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
