오픈 소스 비영리 기관 'Open Source Initiative'의 로고. https://opensource.org/
본 글은 학교 '오픈소스 소프트웨어 입문' 과목을 수강하며 실습(또는 공부)한 내용을 정리한 글입니다.
개인 기록 용도로 작성한 글이라, 직접 이 글을 보고 실습을 따라하기엔 어려움이 많을 것으로 예상됩니다.
혹시 본 글을 보며 Linux를 공부하실 목적이라면, 일단 키워드 위주로 AI에게 물어봐가면서, 본인의 Linux 터미널에서 직접 타이핑해가며 공부하시기를 추천드립니다.
질문이나 의견이 있다면 자유롭게 댓글 달아주세요!
저 그림의 제목은, 컴퓨터 시스템을 구성하는 4가지 요소
임.
시스템이란, 어떤 구성 요소들이 모여서 공통된 목적으로 어떤 작업들을 수행하기 위해서 운영되는 오브젝트를 시스템이라 합니다.
컴퓨터 시스템은, 정보 처리를 하기 위한 시스템입니다.
하드웨어 시스템
이 그림으로 빈칸 뚫어놓고 채워라 그런 건 안함.
이 input output devices는 메모리에 연결되어 있음.
이 5개의 device중에 제일 성능이 높은(빠른) 디바이스는, 무조건 cpu임.
일반적으로 cpu가 데이터를 처리하는 속도가, 메모리가 데이터를 가져오고 저장하는 처리 속도가 10배, 최소 4배정돈 더 빠름.
그리고 메모리가 storage보다 더 빠름.
그리고 메모리 처리 속도보다 Input Output devices 처리 속도가 더 느림.
굳이 처리 속도를 비교한다면, CPU > Memory > Storage > Output devices > Input devices
메모리 안에 input devices랑 output devices를 위한 처리 공간이 따로 있는데, 그걸 버퍼(buffer)라고 부름. 각각 input buffer, output buffer.
그래서 메모리 병목현상 때문에 데이터 처리가 느리니까, cpu 안에 cpu와 속도가 거의 비슷한 속도의 캐쉬를 둠(L1 cache). 근데 그럼 너무 비싸니까, cpu 근처에 4배까지 느린 캐쉬를 둠(L2 cache, L3 cache).
Linux Software
시스템 소프트웨어중에 대표적인 소프트웨어가 운영체제고, 프로그램 언어, cpu 같은 것도 시스템 소프트웨어에 속함. 위는 OS에 대한 그림.
그리고 저 쉘 바깥쪽에 것들은 OS가 아니고, application 줄여서 app.이라고 부름.
그리고 이런 시스템 소프트웨어 말고 가장 안쪽엔 하드웨어가 있고.
이러한 운영체제중에 우리 과목에선 특히 리눅스에 대해 배움.
하드웨어 하나 바깥이 리눅스 커널. kernel은 원래 복숭아 씨를 의미함.
그 다음이 시스템 콜 인터페이스 → 커널을 컨트롤.
그 다음이 시스템 유틸리티들: cat, ls 등 명령어들이 있음.
마지막이 리눅스 쉘: bash, tcsh 등.
리눅스 쉘 다음엔? user(사용자)가 있음. 따라서 사용자는, 하드웨어를 사용하기 위해서 반드시 쉘을 사용해야 함. 쉘 없이 커널을 사용할 수는 없음.
커널이라는 거는 그냥 프로그램 하나임. 리눅스에는 vmlinux라는 실행 파일을 실행하면 커널이 실행됨.
시스템 콜은, printf scanf 이게 시스템 콜임. 내가 프로그램을 짜서 컴파일하면, 마치 시스템 유틸리티처럼 작동함. 얘를 써서 ‘헬로우 월드 출력해줘’라고 시스템 콜을 호출하면, 시스템 콜이 커널을 컨트롤해 그걸 출력함.
우리는 이제 리눅스 명령어들, 즉 리눅스 시스템 유틸리티들을 한 달동안 배울 거임.
Linux Kernel
커널은 100% 소프트웨어임. 하드웨어 아님!
이 커널이 하는 일이 크게 3가지로 나뉨.
- 프로세스 매니지먼트 서브시스템
- 메모리 매니지먼트 서브시스템
- I/O 서브시스템
리눅스 커널의 I/O 서브시스템
리눅스는 입출력을 2가지로 구분하는데, character device drivers가 있고, block device drivers가 있음. 그리고 그 사이에 network device drivers가 있음.(예전엔 저게 별로 안중요했었다함)
- character device (drivers): 한 문자씩 처리하고, 터미널, 키보드, 마우스나 시리얼 포트 등 데이터의 흐름이 중요한 장치가 해당됨. 이런 장치는 데이터를 저장하지 않고, 실시간으로 데이터를 읽거나 씀.
- block device (drivers): 데이터를 고정된 크기의 블럭 단위로 처리하고, HDD, SDD같은 저장장치가 해당됨.
- network device (drivers): 컴퓨터 시스템이나 다른 장치들이 네트워크를 통해 서로 통신할 수 있도록 해주는 하드웨어 장치임. NIC, 라우터, 스위치 등이 있음. 드라이버는 흔히 말하는 LAN 드라이버 같은 게 있음. network device를 호출하는 건 socket programming을 배워야 함.
Device vs Device driver 차이점.
- Device (장치):
- 실제 하드웨어 장치입니다.
- 데이터를 저장, 출력, 입력하는 실제 물리적인 장치입니다.
- 예: 하드 드라이브, 마우스, 키보드, 프린터.
- Device Driver (장치 드라이버):
- 장치와 운영 체제 사이에서 상호작용을 가능하게 하는 소프트웨어입니다.
- 운영 체제가 장치와 어떻게 소통하고 제어할지 정의합니다.
- 예: 하드 드라이브 드라이버, 마우스 드라이버, 프린터 드라이버.
예를 들어 samsung usb(D:) 형식 같은 속성 보면, 파일 시스템은 용량이 119GB 저런 식으로 나와있음. 할당 단위 크기 - 저게 block size임. 저걸 키우면, 큰 파일을 저장할 때 한 블럭만에 오겠지. 그래서 큰 파일을 굉장히 자주 저장하는 스토리지면 블럭 사이즈를 크게 하는 게 유리함. 보통 블럭 사이즈는 4KB임.
근데, 예를 들어 내가 15바이트짜리 텍스트파일을 저장할 건데 블럭 사이즈가 몇기가고 그러면, 저거 파일 하나 저장할 때도 몇기가가 들어감. 그래서 효율이 안좋음.
Terminal
character device 중 대표적인 것중에 터미널이 있음.
옛날엔 vt100 저런 뚱뚱한 컴퓨터를 터미널이라 불렀는데, 저게 실제로 메인 서버와 선으로 연결되어 있었음. 그래서 terminal.
하나의 컴퓨터를 여러 명이 쓸수 있는 게 multi-user os. 멀티 유저 os. 모니터 2대 키보드 2대 이런 거임. 입출력 장치가 여러 대인 것.
이 때 이거 깔짝 저거 깔짝 하는 게 time division인데, 이런 time division multi-user os중 대표적인 게 리눅스. 리눅스는 유닉스 계열 중 대표적인놈.
이러한 multi-user가 가능하게 해주는 게 스도 터미널 덕분임.
키보드, 모니터를 기본 입출력 장치(표준 입출력 장치)라고 하는데, 이걸 터미널이라고 부름.
참고로 line discipline이 한 줄씩 할지 어케 할지 규칙을 정하는 거.
이 vt100 터미널이 입출력하기 위해선, 저 character device drivers가 돌아가고 있어야 입출력이 됨.
'Tools and Utilities > Linux' 카테고리의 다른 글
[Linux 실습] Ch3. 완전 기본적인 명령어들(Very basic commands) (0) | 2025.03.27 |
---|---|
[Linux 실습] Ch2. 터미널과 명령어 설계(Terminal and Command Design) (0) | 2025.03.27 |
[Linux] 쉘, 터미널, bash, git bash, mingw-w64 등 완벽 개념정리!!! (0) | 2025.03.05 |
[Linux] 리눅스 기본 명령어들(commands) 간단 정리!! (0) | 2024.09.12 |
[Linux] Ubuntu에 Java, Git, Vim 등 설치하기 (0) | 2024.09.12 |