CS 6

OS 파일 시스템: 파일 테이블과 I/O 성능 개선 기법

1. 서론시스템 프로그래밍 시간에 학습한 내용을 바탕으로 OS가 파일을 관리하는 방법에 대해서 정리하고자 한다. 응용프로그래밍에서 파일을 열면 운영체제가 이를 어떻게 관리하는지 간단하게 살펴보도록 하자. 또한, 운영체제가 어떻게 디스크와 같은 저장장치를 추상화 하는지, inode를 활용하여 파일의 데이터 블럭을 찾는 과정 등의 내용은 다음 포스트에서 살펴보겠다.2. OS가 파일을 관리하는 방법2.1 File TableFile Table은 각 프로세스가 오픈한 파일의 정보를 저장하고 있는 리스트이다. 프로세스는 파일에 대해서 읽기 쓰기 작업을 진행하기 전에 파일을 open한 후 이 프로세스가 그 파일에 대해 해당 작업을 할 수 있는 권한을 인증한 후에 작업을 수행한다. 이 리스트의 각 Entry의 인덱스는..

CS 2024.12.30

스레드 기본 개념

1. 서론스프링부트의 WAS는 각 요청을 스레드를 할당해서 처리한다. 이때 일반적으로 스레드 풀 방식을 사용한다. 그리고 각각의 스레드는 스택에 할당된다. 그렇기 때문에 스레드에서 함수호출이 가능하다. 한편, JPA의 영속성 컨텍스트는 스레드 단위로 할당된다. 그렇기에 Lost update 문제가 발생할 수 있으며, 이는 비관적, 낙관적 락 등으로 해결할 수 있다. 이처럼 스레드는 백엔드 개발에 아주 기본적인 개념이라고 할 수 있다. 이번 글에서는 시스템 프로그래밍 시간에 배운 스레드 내용 중 중요하다고 생각한 부분을 정리해보려고 한다.2. 스레드 (Threads)2.1 스레드 기본 개념 및 특징스레드는 프로세스에 포함된 실행단위이다.이 실행 단위는 독립적으로 CPU 자원을 할당받고 실행되는 별도의 컨텍..

CS 2024.12.23

OS가 관리하는 Clock & Hardware Clock

1. 서론프로세스는 클락(Clock)을 통해서 시간을 알 수 있다. 이는 상대시간일 수 도 있고 절대시간 일 수 도있다. 운영체제는 상대시간은 주로 Monotonic Counter, 절대 시간은 Wall Clock을 활용하여 관리한다. 이번 글에서는 운영체제가 관리하는 시간의 종류와 관리 방법에 대해서 간단히 정리하고자 한다.2. OS가 관리하는 시간의 종류운영체제가 관리하는 시간은 일반적으로 다음 세 가지로 구분된다.2.1 Wall time (Real time)실제 세계의 시간과 일치하며, 사용자가 변경이 가능하다.사용자에게 시간을 제공하거나 사용자의 행동을 시스템 내부에서 기록할때 적합하다.절대 시간을 측정할때 적합하다캘린더에 활용하는 시간백엔드 서버의 로그에 표함된 시간2.2 Monotonic ti..

CS 2024.12.15

표준 I/O 라이브러리의 등장 배경: 시스템 콜 성능 최적화

1. 서론시스템 프로그래밍 수업을 통해 표준 I/O 라이브러리의 등장 배경을 학습하게 되었다. 이는 시스템 콜을 직접적으로 사용할 때 발생하는 성능 저하를 개선하기 위함이다. 이 문제의 원인을 깊이 이해하면 데이터베이스 등 다양한 I/O 작업과 관련된 코드를 작성할때 도움이 될 것 같아 정리를 하게 되었다.2. 시스템 콜을 직접 사용할때 문제2.1 Alignment 문제Alignment 문제는 운영체제가 파일을 Block 단위로 I/O하기 때문에 발생하는 문제이다. 대부분의 파일 시스템과 디스크는 블록(Block) 단위로 데이터를 읽고 쓰며, 그 단위는4KB 또는 그 배수이다. 즉 프로그래머가 임의의 버퍼에 read 혹은 write 하라는 코드를 작성하면 이 버퍼의 시작 주소 및 크기가 Block의 시작..

CS 2024.12.08

OS의 I/O Device 추상화 & Block I/O & Non-Block I/O: Multiplexing

시스템 프로그래밍시간에 배운 개념중 개인적으로 중요하다고 생각한 개념을 정리해보았다.1. OS의 I/O Device 추상화1.1 OS는 I/O Device를 File 이라는 개념으로 추상화한다.운영 체제는 다양한 입출력 장치를 일관된 방식으로 다루기 위해 I/O Device를 파일이라는 개념으로 추상화한다. 이를 통해 운영 체제는 키보드, 파이프, 스토리지, 네트워크 소켓 등 모든 I/O 장치를 동일한 방식으로 다룬다. 예를 들어, 프로그램이 하드 디스크에서 데이터를 읽는 작업과 네트워크에서 데이터를 읽는 작업을 동일한 방식으로 처리할 수 있다. 이 덕분에, 응용 프로그램 개발자는 하드웨어 세부 사항을 신경 쓰지 않고도 입출력 작업을 처리할 수 있다. 운영체제는 “파일 디스크립터”라는 모든 I/O Dev..

CS 2024.12.01

CPU & I/O Bound Job: 최적의 스레드 개수

서론시스템 프로그래밍 과제를 해결하며 CPU bound 와 I/O bound 작업에 대해 스레드의 개수를 변화시켜가며 총 소요시간을 관찰해보았다. CPU bound작업은 스레드의 개수가 하드웨어의 코어 개수와 비슷할때 성능이 가장 좋았고 스레드 개수가 늘어날수록 성능이 안좋아졌다. 한편, I/O 작업은 스레드가 너무 많지 않은 선에서 개수가 늘어날수록 성능이 개선되었다. 이러한 결과의 원인을 분석하고자 CPU&I/O Bound job의 특징을 정리하고 각 경우에 적정 쓰레드 개수를 어떻게 설정할지 조사해보았다.1. CPU Bound job1.1 CPU Bound 정의주로 CPU의 성능에 총 소요시간이 결정되는 작업즉, CPU의 코어 수나 클럭 속도 등이 소요 시간에 큰 영향을 미침ex) 대규모 수학 계산..

CS 2024.11.21