실습과 그림으로 배우는 리눅스 구조
-
실습과 그림으로 배우는 리눅스 구조 8장 정리운영체제 2022. 11. 13. 17:49
저장 장치 HDD 데이터를 자기 정보로 변환하여 자기 장치에 기록한다. 바이트 단위가 아닌 섹터 단위(512Byte or 4096KB)로 읽고 쓴다. 데이터를 읽고 쓸 때, 스윙암의 동작과 플래터의 회전이 필요한데 이는 전기적 동작이 아닌 기계적 동작이기 때문에 느릴 수 밖에 없다. HDD의 성능(I/O 지원 기능을 사용하지 않았을 때) 연속하는 섹터의 경우 한번의 접근 요청으로 데이터를 읽을 수 있으며, 여러 번 접근하는 방식보다 빠르다. 시퀀셜 접근한 경우 I/O 사이즈가 증가함에 따라 스루풋이 증가한다. 랜덤으로 접근한 경우 I/O 사이즈가 증가함에 따라 스루풋이 증가한다. 시퀀셜 접근은 한 번의 접근으로 처리할 수 있기 때문에 랜덤 접근 보다 빠르다. 블록 장치 계층 블록 장치는 디바이스 파일(/..
-
실습과 그림으로 배우는 리눅스 구조 7장 정리운영체제 2022. 11. 10. 01:00
파일시스템 리눅스의 파일 시스템은 트리 구조로 되어 있다. ext4, XFS, Btrfs 등의 파일 시스템을 사용할 수 있다. 이외에도 다양한 종류의 파일 시스템들이 존재한다. 프로세스가 파일 시스템과 관련된 시스템 콜 호출시 동작 흐름 커널 내 모든 파일 시스템 공통처리가 동작 대상 파일의 파일시스템 종류를 판별 후, 시스템 콜에 대응되는 처리를 한다. 파일 시스템이 XFS, ext4, Btrfs 등 인지 판별 한다. 데이터 읽기의 경우, 디바이스 드라이버에게 맡긴다. 디바이스 드라이버가 데이터를 읽어들인다. 데이터와 메타데이터 데이터 - 문서, 사진, 프로그램 등의 내용 메타데이터 - 종류, 시간정보, 권한 정보 등의 정보를 가지고 있음 df 커맨드를 통해서 본 파일 시스템의 스토리지 양은 메타데이터..
-
실습과 그림으로 배우는 리눅스 구조 6장 정리운영체제 2022. 11. 6. 21:15
메모리 계층 메모리 장치의 종류 레지스터 캐시 메모리 메모리 저장 장치 위로 올라갈수록 용량이 작고, 비싸며, 빠르다. 캐시 메모리 CPU에서 메모리에 접근하는 시간이 길기 때문에, CPU 입장에서는 레이턴시가 발생한다. 캐시 메모리 처리는 커널을 통하지 않고, 하드웨어 단에서 처리된다. 캐시 메모리를 이용해서 메모리 접근 시간을 고속화 한다. 캐시 메모리는 일반적으로 CPU에 내장되어 있지만, 외부에 있는 경우도 있다. 캐시 메모리의 값이 변경되는 경우 캐시 메모리의 엔트리가 변경되면 더티 플래그가 표시된다. 더티 플래그가 기록된 데이터는 나중에 백그라운드 처리로 메모리에 다시 기록된다. 캐시 메모리가 가득 찬 경우 캐시 메모리에 존재하지 않는 데이터를 추가로 읽으면, 기존의 캐시 메모리 중 하나를 파..
-
실습과 그림으로 배우는 리눅스 구조 5장 정리운영체제 2022. 11. 6. 12:56
메모리 관리 단순 메모리 할당시 문제점 커널이 프로세스에 메모리를 할당하는 경우는 다음과 같다. 프로세스가 생성될 때 프로세스가 시스템 콜을 통해서 동적으로 메모리를 할당 받을 때 malloc() 단순한 메모리 할당 방법의 문제점 메모리 단편화 문제 다른 용도의 메모리에 접근 가능 여러 프로세스를 다루기 곤란 메모리 단편화 문제 메모리 획득과 해제를 반복하면, 메모리 단편화가 발생한다. 총 남아있는 메모리 양은 충분하지만, 중간 중간이 비어 있어서 사용할 수 없는 경우가 발생한다. 다른 용도의 메모리에 접근 가능 주소를 직접 지정하면 데이터가 오염되거나 파괴될 위험이 있다. 여러 프로세스를 다루기 곤란 같은 프로그램을 실행하게 되었을 때, 주소가 겹치면 실패하는 경우도 있다. 이렇게 단순한 메모리 할당은..
-
실습과 그림으로 배우는 리눅스 구조 3장 정리운영체제 2022. 10. 30. 14:29
프로세스 관리 프로세스 생성 목적 같은 프로그램의 처리를 여러 프로세스가 나눠서 처리하는 경우 웹서버에 요청이 들어왔을 때 동시에 처리해야 하는 경우 fork() 함수를 사용한다. 전혀 다른 프로그램을 생성해야 하는 경우 bash로부터 각 종 프로그램을 생성하는 경우 execve() 함수를 사용한다. fork()와 execve() 1. fork() 같은 프로그램의 처리를 여러 프로세스가 나눠서 처리해야 하는 경우 사용한다. fork() 실행시 새로운 프로세스가 생성된다. fork를 실행한 프로세스가 부모 프로세스가 되고, 새롭게 생성된 프로세스가 자식 프로세스가 된다. 프로세스 생성 순서 부모 프로세스의 메모리를 자식 프로세스 메모리 영역에 복사(새로운 메모리 영역을 할당) 이후 자식 프로세스와 부모 프..
-
실습과 그림으로 배우는 리눅스 구조 2장 정리운영체제 2022. 10. 30. 10:01
사용자 모드로 구현되는 기능 1. 시스템 콜 사용자 모드에서 동작하는 프로그램은 시스템 콜을 통해서 커널 처리를 호출한다. 여기서 프로그램은 OS 라이브러리, 이외의 라이브러리, 프로세스 고유의 코드 등을 말한다. 시스템 콜의 종류 프로세스 생성, 삭제 메모리 확보, 해제 IPC 네트워크 파일 시스템 접근 유저 모드에서 CPU 모드를 변경하려면 반드시 시스템 콜을 거쳐야 한다. [strace] 커맨드를 통해서 시스템 콜 호출 목록을 조회할 수 있다. [sar] 커맨드를 통해서 프로세스가 CPU를 어떤 비율로 실행하고 있는지 확인할 수 있다. 사용자 모드 = user + nice 커널 모드 = system 2. 프로세스가 커널을 사용하는 과정 1) 프로세스는 보통 사용자 모드로 실행되지만, 커널에 요청을 ..
-
실습과 그림으로 배우는 리눅스 구조 1장 정리운영체제 2022. 10. 29. 11:21
정리 리눅스의 중요한 역할은 디바이스를 조작하는 일이다. 디바이스 드라이버를 통해서만 프로세스가 디바이스를 조작할 수 있다. 리눅스는 디바이스의 종류가 같으면 같은 인터페이스로 조작한다. CPU는 프로세스가 직접 하드웨어에 접근하는 것을 차단한다. CPU에는 사용자 모드와 커널 모드가 있다. 사용자 모드로 처리하는 경우 일반적인 프로세스 처리 커널 모드로 처리하는 경우 디바이스 드라이버에 접근하는 경우 프로세스 관리 시스템 프로세스 스케줄링 메모리 관리 시스템 프로세스가 커널 모드의 기능을 사용하기 위해서는 시스템 콜을 통해 커널에 요청을 한다. 커널은 CPU, 메모리 등의 자원을 관리하며, 각 프로세스에 적절히 분배한다. 프로세스 스케줄러는 CPU 자원을 관리한다. 메모리 관리 시스템은 메모리 자원을 ..