profile
고수가 되고싶다
post-thumbnail

OSTEP 32 - Concurrency Bugs

핵심 질문: 일반적인 병행성 관련 오류들을 어떻게 처리하는가병행성 버그는 몇개의 전형적인 패턴을 갖고 있다. 튼튼하고 올바른 병행 코드를 작성하기 위한 가장 첫 단계는 어떤 경우들을 피해야 할지 파악하는 것이다.복잡한 병행 프로그램에서 발생하는 오류들은 어떤 것들이 있

2025년 3월 26일
·
0개의 댓글
·
post-thumbnail

OSTEP 31 - Semaphore

세마포어의 값을 1로 사용하는 것과, mutex_lock의 차이는 뭘까? 세마포어로 락을 사용할 수 있다면, mutex는 왜 사용하는걸까?Dijkstra와 그의 동료들은 모든 다양한 동기화 관련 문제를 한 번에 해결할 수 있는 그런 기법을 개발하고자 했다. 그리고 세마

2025년 3월 24일
·
0개의 댓글
·

OSTEP 30 - Condition Variables

지금까지 락의 개념을 학습하면서 하드웨어와 운영체제의 적절한 지원을 통해 제대로 된 락을 만드는 법을 살펴보았다. 불행히도“락”만으로는 병행 프로그램을 제대로 작성 수 없다.쓰레드가 계속 진행하기 전에 어떤 조건이 참인지를 검사해야 하는 경우가 많이 있다. 예를 들면

2025년 3월 22일
·
0개의 댓글
·
post-thumbnail

OSTEP 29 - Locked Data Structures

자료 구조에 락을 추가하여 쓰레드가 사용할 수 있도록 만들면, 그 구조는 thread safe하다고 할 수 있다.핵심 질문: 자료 구조에 락을 추가하는 방법어떤 방식으로 락을 추가해야 그 자료 구조가 정확하게 동작하게 만들 수 있을까? 더 나아가, 자료 구조에 락을 추

2025년 3월 16일
·
0개의 댓글
·
post-thumbnail

OSTEP 28 - Locks

프로그래머들은 소스코드의 임계 영역을 락으로 둘러서 그 임계 영역이 하나의 원자 단위 명령어인 것처럼 실행되도록 한다.다음과 같은 임계 영역이 있고, 락을 사용하기 위해 임계 영역을 감쌌다.락은 하나의 변수이기 때문에, 락을 사용하기 위해서는 락 변수를 먼저 선언해야한

2025년 3월 15일
·
0개의 댓글
·

OSTEP 27 - Thread API

핵심 질문: 쓰레드를 생성하고 제어하는 방법운영체제가 쓰레드를 생성하고 제어하는데 어떤 인터페이스를 제공해야 할까? 어떻게 이 인터페이스를 설계해야 쉽고 유용하게 사용할 수 있을까?멀티 쓰레드 프로그램 작성시, 가장 먼저할 일은 새로운 쓰레드의 생성이다. POSIX를

2025년 3월 15일
·
0개의 댓글
·
post-thumbnail

OSTEP 26 - Concurrency and Thread

이번 장에서는 프로세스를 위한 새로운 개념인 쓰레드(Thread)를 소개한다. 멀티 쓰레드 프로그램은 하나 이상의 실행 지점을 가지고(독립적인 여러개의 PC값), 주소 공간을 공유할 수 있다. 프로세스가 문맥교환을 하고 정보를 저장하기 위해 PCB가 존재하듯이, 쓰레드

2025년 3월 1일
·
0개의 댓글
·
post-thumbnail

OSTEP 22 - Swapping: Policies

시스템의 전체 페이지들 중 일부분만 메인 메모리에 유지된다는 것을 가정하면, 메인 메모리는 시스템의 가상 메모리 페이지를 가져다 놓기 위한 캐시로 생각될 수 있다.교체 정책의 목표는 캐시 미스의 횟수를 최소화하는 것이다. 즉, 디스크로부터 페이지를 가져오는 횟수를 최소

2025년 2월 27일
·
0개의 댓글
·
post-thumbnail

OSTEP 21 - Swapping: Mechanism

지금까지는 모든 페이지들이 물리 메모리에 존재하는 것을 가정했다. 하지만 큰 주소 공간을 지원하기 위해 OS는 현재는 크게 필요하지 않은 주소공간의 일부를 보관해 둘 공간이 필요하다. 이를 위해 메모리 계층에 레이어의 추가가 필요하다. 현대 시스템에서는 하드 디스크 드

2025년 2월 27일
·
0개의 댓글
·
post-thumbnail

OSTEP 20 - Advanced Page Table

페이징의 두번째 문제점은 페이지 테이블의 크기이다.전에 말했듯이, 선형 페이지 테이블을 예시로 들면, 32비트 운영체제의 경우 페이지 테이블 하나의 크기는 4MB 정도 되고, 프로세스가 100개라면 페이지 테이블을 위해 400MB의 메모리가 필요하다.핵심 질문: 페이지

2025년 2월 23일
·
0개의 댓글
·
post-thumbnail

OSTEP 19 - Translation Lookaside Buffer

페이징은 상당한 성능 저하를 가져올 수 있다. 페이지 테이블의 저장을 위해 큰 메모리 공간이 요구된다. 주소 변환을 위해 페이지 테이블의 정보를 읽어야하고, 페이지 테이블 접근을 위한 메모리 읽기 작업의 비용은 비용이 크다. 모든 load/store 명령마다 페이지 테

2025년 2월 16일
·
0개의 댓글
·
post-thumbnail

OSTEP 18 - Introduction fo Paging

운영체제는 거의 모든 공간 관리 문제를 해결할 때 두가지 중 하나를 사용한다.가변 크기의 조각들로 분할 (세그멘테이션) 그러나 다양한 크기로 분할하면서 공간에 대한 단편화가 많이 발생하고, 할당이 어려워진다. 동일 크기의 조각으로 분할 이번 장에서 배우게 될 Pa

2025년 2월 15일
·
0개의 댓글
·
post-thumbnail

OSTEP 17 - Free Space Management

이 장에서는 메모미 가상화 논의에서 약간 우회하여 메모리 관리 시스템의 근본적인 측면을 논의한다. 메모리 관리 시스템이란 malloc()(프로세스 힙 페이지 관리)일 수도 있고, 운영체제(프로세스 주소공간의 일부 관리)일 수도 있다.특히, 빈 공간 관리에 초점을 둘 것

2025년 2월 15일
·
0개의 댓글
·
post-thumbnail

OSTEP 16 - Segmentation

베이스와 바운드 레지스터만을 사용하는 주소공간 개념에서는, 힙과 스택 사이에 사용되지 않는 큰 공간이 존재한다. 사용되지는 않더라도 메모리는 차지하게 되는데, 메모리 낭비가 심하다고 볼 수 있다.주소 공간의 논리적인 세그먼트마다 base/bound 레지스터가 존재한다.

2025년 2월 13일
·
0개의 댓글
·
post-thumbnail

OSTEP 15 - Address Translation

CPU 가상화 부분에서, 제한적 직접 실행(LDE)에 대해서 배웠다. 중요한 순간에 운영체제가 관여하여 하드웨어를 직접 제어한다. 메모리 가상화에서도 비슷한 전략을 추구한다. 가상화를 제공하는 동시에 효율성과 제어를 모두 추구한다.효율성을 위해 하드웨어의 자원을 사용한

2025년 2월 13일
·
0개의 댓글
·

OSTEP 14 - Memory API

C 프로그램이 실행되면, 스택과 힙이라는 두가지 유형의 메모리 공간이 할당된다.스택(stack) 메모리메모리의 할당과 반환은 컴파일러에 의해 암묵적으로 이루어져, 자동 메모리라고도 불린다. 함수 안에서 변수를 선언하게 되면, 컴파일러가 함수가 호출될 때 스택에 공간을

2025년 2월 2일
·
0개의 댓글
·
post-thumbnail

OSTEP 13 - Address Space

메모리 관점에서 초기 컴퓨터는 많은 개념을 사용자에게 제공하지 않았다.물리 메모리에 하나의 실행 중인 프로그램(프로세스)이 존재하였고. 쓰고 남은 메모리를 사용했다. 가상화는 거의 존재하지 않았다.여러 프로세스가 준비상태에 있고 운영체제는 이를 전환하면서 실행했다. 예

2025년 1월 30일
·
0개의 댓글
·
post-thumbnail

OSTEP 10 - Multi-CPU Scheduling

이 장에서는 멀티 프로세스 스케줄링의 기본을 소개한다. 더 자세한 내용은 이후에 병행성(concurrency) 부분에서 다루게 된다. 병행성 부분을 공부하고 다시 본다면 더 이해가 잘될 것이다.현재는 여러개의 CPU 코어가 하나의 칩에 내장된 멀티코어 프로세서가 어디에

2025년 1월 27일
·
0개의 댓글
·
post-thumbnail

Linux에서 스케줄링

운영체제를 공부하다보니 리눅스는 CFS 스케줄링 방식을 사용한다는 것을 알게 되었다. 이에 조금더 자세히 찾아보게 되었고, linux의 스케줄링에 대해 공부했다. 공부해보니 무조건 CFS를 사용하는건 아니고, 작업의 특성에 따라 달라진다는 것을 알게 되었다.공부하다가

2025년 1월 25일
·
1개의 댓글
·
post-thumbnail

OSTEP 9 - Lottery Scheduling

이 장에서는 비례 배분(Proportional Share), 공정 배분(fair share)이라고도 하는 유형의 스케줄러에 대해 다룬다. 비례 배분은 스케줄러가 각 작업에게 정해진 비율로 CPU를 배분하는 것을 보장하는 것이 목적이다.비례 배분 스케줄리의 예시인 추첨

2025년 1월 22일
·
0개의 댓글
·