예전에 시스템 프로그래밍을 조금 더 잘 알고 싶어서 리얼 리눅스에서 강의를 들은 적이 있는데, 그 때는 노션에 정리를 하던 시절이라서 블로그에 게시하지 못했다. 따라서 그때 정리한 개념을 블로그에 글로 작성해보고 다시 운영체제에 대해서 복습하였다.
리눅스를 공부할 때 중요한 개념
리눅스를 공부할 때는 다음과 같은 개념이 중요하다고 했다.
-
소프트웨어 기본 원리 : 당연한 말이지만, 소프트웨어의 기본 동작 원리를 제대로 아는 것이 중요하다.
-
메모리 액세스 원리 : 운영체제에서 메모리를 어떻게 액세스 하고 관리하는지 아는 것이 중요하다.
-
파일(디스크) IO : 디스크 및 파일 시스템에 대해서 아는 것이 중요하다.
-
네트워크 IO: 네트워크 통신 및 기초에 대해서 알아야한다.
운영체제의 역할
운영체제의 핵심 역할은 다음과 같이 나누어 볼 수 있다.
- 프로세스 관리 (
Process Management
) - 메모리 관리 (
Memory Management
) - 인터럽트(
Interrupt
) / 예외 처리(Exception
) / 락킹(Locking
) - IO 처리
- 네트워크 (L4: TCP, L3: IP, L2: DD)
- 스토리지 (
VFS
/FS
/BLOCK
)
- 기타 : 보안(
security
), 도구(tools
), 사운드(sounds
), 드라이버(drivers
)
위의 스크린샷은 리눅스 커널 소스코드인데, 위에서 설명한 운영체제의 핵심 역할에 맞게 디렉터리가 구성되어 있는 것을 확인할 수 있다.
kernel
: 리눅스 커널 내부와 관련된 작업을 하는 곳이다.mm
: 메모리와 관련된 작업을 하는 곳이다.fs
: 파일 시스템과 관련된 작업을 하는 곳이다.net
: 네트워크와 관련된 작업을 하는 곳이다.