트랜잭션의 격리수준(Isolation level)
·
운영체제
저번 DeadLock 과 Redis 대기열(1) 포스팅에서 DeadLock 해결법에 여러가지가 있다고 한 것중에 트랜잭션의 격리 수준을 조절하는 방법이 있다고 했는데, 이 때 트래잭션의 격리 수준에 대해서 알아보도록 하겠습니다. 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 또한, 데이터베이스 관리 시스템에서 여러 개의 동시 실행되는 트랜잭션들 간에 어떻게 데이터의 일관성과 격리를 유지할지를 정의하는 개념입니다. 격리 수준은 아래와 같이 4가지로 나뉩니다. 1.Read Uncommitted(레벨 0) 가장 낮은 격리 수준이며, 트랜잭션에서 변경된 내용이 커밋되지 않더라도 다른 트랜잭션에서 해당 내용을 읽..
DeadLock과 Redis 대기열 사용하기 - (2)
·
운영체제
앞서 1번 포스팅에서는 DeadLock에 대해서 알아봤습니다. 이번에는 Redis가 무엇인지 그리고 Redis Cluster, Replication, 대기열에 대해서 알아보도록 하겠습니다. 🧐 Redis Redis(Remote Dictionary Storage, 레디스)는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스, 메모리 기반의 key-value 구조의 데이터 관리 시스템이다. Redis는 인메모리 데이터 스토어로서 매우 빠른 데이터 액세스와 처리를 제공하는 오픈 소스 데이터베이스 시스템입니다. 주로 캐싱, 세션 관리, 메시지 브로커 등 다양한 용도로 사용됩니다. Redis의 다양한 특징들 1. In-Memory 데이터 저장 데이터를 메모리에 저장하여 매우 빠른 읽기 및 쓰기 작업을..
DeadLock과 Redis 대기열 사용하기 - (1)
·
운영체제
이번에는 저번 구글 I/O Extended 2023 백엔드에서 들었던 GDG Incheon 백엔드 양일표 개발자님께서 강연해주셨던 DeadLock과 Redis 대기열 사용하기에서 새로 알게 된 내용과 깨달은 점을 정리해보려고합니다. 🧐 DeadLock 우선 DeadLock이란 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 일컫습니다. 이 때 DeadLock에 대한 해결법이 여러가지가 있는데 강연 중 소개해주신 해결법들은 트랜잭션의 크기, 방향, Lock, 격리 수준, 쿼리 튜닝, @Retryable 등과 같은 요소들을 고려하는 방법입니다. 1. 트랜잭션 크기 조절 트랜잭션 분할: 큰 트랜잭션을 작은 단위로 분할하여 실행하면, 더 적은 자원을 점유하므..
[Pintos-Kaist] Project3 - Swap In/Out
·
운영체제
이번에는 프로젝트 3의 마지막 구현과제인 Swap In/Out에 대해서 구현을 해보도록 하겠습니다. 먼저 메모리 스왑은 물리적 메모리 사용량을 최대화하기 위한 메모리 회수 기술입니다. 주 메모리의 프레임이 할당되면 시스템은 사용자 프로그램의 메모리 할당 요청을 더 이상 처리할 수 없습니다. 한 가지 해결책은 현재 사용되지 않는 메모리 프레임을 디스크에 스왑아웃하는 것입니다. 이렇게 하면 일부 메모리 리소스를 확보하여 다른 애플리케이션에서 사용할 수 있습니다. Anonymous Page에는 백업 스토리지가 없기 때문에 스왑을 지원하기 위해 스왑 디스크라는 임시 백업 스토리지를 만들어서 사용합니다. 그에 반해 File Mapped Page는 콘텐츠를 파일에서 가져오기 때문에 매핑된 파일을 백업 저장소로 사용..
[Pintos-Kaist] Project3 - Stack Growth, Memory Mapped Files
·
운영체제
이번 포스팅에서는 Stack Growth, Memory Mapped Files에 대한 구현을 해보겠습니다. Stack Growth 구현 1️⃣ bool vm_try_handle_fault (struct intr_frame *f, void *addr, bool user, bool write, bool not_present) 이 함수는 페이지 오류 예외를 처리하는 동안 userprog/exception.c의 page_fault에서 호출됩니다. 이 함수에서는 페이지 오류가 스택 증가에 유효한 경우인지 여부를 확인해야 합니다. 스택 증가로 오류를 처리할 수 있음을 확인했다면 오류가 발생한 주소로 vm_stack_growth를 호출합니다. bool vm_try_handle_fault (struct intr_fra..
[Pintos-Kaist] Project3 - Anonymous Page
·
운영체제
이전 포스트에서는 프로젝트 3의 Memory Management부분에 대해 구현을 했습니다. 마지막 부분에 해당하는 vm_alloc_page_with_initializer라는 함수를 시작으로 나머지 Anonymous Page를 구현 시작해 보도록 하겠습니다. ✔️ Anonymous Page란? Anonymous 페이지는 파일 기반 페이지와 달리 이름이 지정된 파일 소스가 없기 때문에 Anonymous page라고 부릅니다. Anonymous 페이지는 스택 및 힙과 같은 실행 파일에 사용됩니다. Anonymous 페이지는 프로그램이 실행되는 동안 필요한 메모리 공간을 동적으로 할당하여 프로그램의 요구에 맞게 메모리를 사용할 수 있습니다. Anonymous 페이지는 가상 메모리 공간에서 실제 메모리로 데이터..
[Pintos-Kaist] Project3 - Memory Management
·
운영체제
핀토스 프로젝트 3에서는 Virtual Memory에 관한 내용들을 토대로 구현을 시작합니다. 우선 첫 번째 구현 요소인 Memory Management에 대해서 알아보겠습니다. Memory Management 가상 메모리 시스템을 지원하려면 가상 페이지와 물리적 프레임을 효과적으로 관리해야 합니다. 즉, 어떤 (가상 또는 물리적) 메모리 영역이 어떤 목적으로, 누가, 어떤 용도로 사용되고 있는지 등을 추적해야 합니다. 먼저 보충 페이지 테이블을 다룬 다음 물리적 프레임을 다룰 것입니다. 이해를 돕기 위해 가상 페이지에는 '페이지'라는 용어를, 물리적 페이지에는 '프레임'이라는 용어를 사용한다는 점에 유의하세요. Struct page struct page에 hash_elem 멤버를 추가해서 해당 페이지를..
[Pintos-Kaist] Project2 - System Call(4) - (exec, fork, wait)
·
운영체제
지난 시스템 콜 기능 구현 포스트에서는 exec, fork, wait을 제외한 기능들을 구현했습니다. 관련 내용은 아래 포스트 참고하시길 바랍니다. https://yunchan97.tistory.com/73 [Pintos-Kaist] Project2 - System Call(3) -(write, putbuf, open, process_add_file, process_get_file, read, filesize, seek, tell, 지난 포스트에서는 전체적인 코드의 흐름을 파악하는 과정을 봤습니다. 아래 포스트에 이어서 다음 기능을 구현해보겠습니다. https://yunchan97.tistory.com/71 [Pintos-Kaist] Project2 - System Call(1) - (halt, exit..
yunchan^.^
'운영체제' 카테고리의 글 목록