분류 전체보기 77

빈 공간 관리

메모리 관리 시스템프로세스 힙의 페이지를 관리하는 malloc 라이브러리일 수 있고 혹은 프로세스의 주소 공간의 일부분을 관리하는 운영체제 자체일 수 있다.빈 공간 관리의 경우 고정 크기의 경우 관리가 쉬움 → 고정 크기 단위 리스트를 유지하면서 그 중 첫 번째 항목을 반환하면 됨가변 크기 빈 공간의 경우 관리가 어려움 → malloc, free 처럼 사용자 수준 메모리 할당 라이브러리, 세그멘테이션으로 물리 메모리를 관리하는 운영체제에서 발생→ 빈공간을 다양한 크기의 작은 조각으로 분할되어 결국 단편화 발생→ 요청된 것보다 크더라도 연속된 영역이 존재하지 않으면 요청 실패가정- malloc, free에서 제공하는 것과 같은 기본 인터페이스를 가정- free()는 포인터만으로 해제하고자 하는 메모..

운영체제(OSTEP) 2024.11.09

멀티 레벨 페이지 테이블 (OSTEP 20장)

멀티 레벨 페이지 테이블선형 페이지 테이블을 트리 구조로 표현한다.매우 효율적인 방법으로 현대 시스템에서 사용되고 있음멀티 레벨 페이지 테이블 기본 개념1. 페이지 테이블을 페이지 크기의 단위로 나눈다. 페이지 테이블의 페이지가 유효하지 않은 항목만 있으면, 해당 페이지를 할당하지 않음 2. 페이지 디렉토리라는 자료 구조를 사용하여, 페이지 테이블 각 페이지의 할당 여부와 위치 파악**선형 페이지 테이블은 배열이므로 스택이 맨 마지막에 배치 되어 중간에 불필요한 부분까지 페이지를 할당해야 함 **반면 다단계 페이지 테이블의 경우 필요한 부분에 대해서만 페이지를 할당하면 되므로, 메모리를 절약할 수 있다. (페이지 테이블을 나눠 스택과 힙 사이의 공간이 존재하지 않음)- 배열의 경우 1000번 ..

TLB

TLB (주소 변환 캐시)자주 참조되는 가상-물리 주소 변환 정보를 저장하는 하드웨어 캐시 주소 변환을 빠르게 하기 위해서 TLB를 사용한다.TLB는 칩의 메모리 관리부(MMU)의 일부이다. - 프로세싱 코어와 가까운 곳에 위치TLB를 사용하지 않는 경우1. 가상 주소 생성2. 가상 주소를 물리 주소로 변환하기 위해 메인 메모리에 있는 페이지 테이블 조회 메모리 참조 1회3. 데이터 접근 : 변환된 물리 주소를 사용하여 실제 데이터를 메모리에서 읽는다. 메모리 참조 2회 TLB를 사용하는 경우1. 가상 주소 생성2. TLB 조회 : TLB에 해당 가상 주소의 페이지 테이블 엔트리가 있는지 확인 [TLB 히트] - 페이지 테이블에 대한 메모리 접근 없이 물리 주소를 즉시 얻음 ..

가상 메모리 - 요약

가상 메모리는 한정된 물리 메모리의 한계를 극복하고, 각 프로세스가 무한한 메모리를 사용할 수 있는 것 처럼 느끼도록 시스템이 메모리를 추상화한 개념 - 각 프로세스가 자신만의 메모리 공간을 가지는 것처럼 보이도록 하여 프로세스간 격리를 수행- 실제 물리 메모리가 부족할 경우 보조 기억 장치를 활용하여 필요한 데이터를 스왑하는 방식으로 무한한 메모리를 갖는 것처럼 보임- 자주 사용하는 메모리는 물리 메모리에 놓고, 자주 사용되지 않는 데이터는 스왑 영역에 내려 물리 메모리를 효율적으로 사용가상 메모리 주소- 가상 메모리 주소는 단순 주소 범위를 뜻한다.- 64비트 시스템에서는 이론적으로 16엑사 바이트의 가상 메모리 주소 공간을 가질 수 있다.→ 현실적인 제약으로 일부 비트를 사용하지 않기도 함 ..

문맥교환

문맥교환이란운영체제 커널은 문맥 전환을 통해 멀티테스킹을 구현한다.커널은 각 프로세스마다 컨텍스트를 유지한다.컨텍스트는 커널이 선점된 프로세스를 다시 시작하기 위해 필요로 하는 상태이다. - 범용 레지스터, 프로그램 카운터, 사용자 스택, 커널 스택, 상태 레지스터, 페이지 테이블, 프로세스 테이블, 파일 테이블 같은 객체들 값들로 구성커널이 실행할 프로세스 선택 - 스케줄 했다.커널이 스케줄 한 후 현재 프로세스를 선점하는 것 - 문맥 교환 **스케줄러는 준비큐에 있는 구조체에서 프로세스 ID, 프로세스 우선순위, 프로세스 상태, PCB 포인터 정보를 가져온다.PintOS에서 PCB는 thread 구조체문맥교환이 발생하는 경우1. 하드웨어 인터럽트가 발생하는 경우 타이머 인터럽트가..

인터럽트

인터럽트프로세서가 현재 실행 중인 작업을 일시 중단하고 다른 작업을 처리해야할 때 발생하는 신호 Ex) 키보드, 마우스 입력, 시스템 콜, 페이지 폴트 등등 **** 인터럽트를 실행한다고 해서 반드시 다른 작업을 처리한 후 원래 작업으로 돌아오는 것은 아니다.Ex) 문맥교환 인터럽트의 경우 다른 프로세스로 전환됨일반적인 인터럽트 사이클1. CPU가 인터럽트 발생을 확인하고, 현재 실행 중인 작업을 중단한다.2. 실행 중인 프로세스의 PC, 스택, 일반 레지스터, 상태 레지터 등의 현재 상태를 특수 저장소에 저장일반적으로 커널 스택이나 커널 메모리 영역 또는 PCB에 저장 3. CPU의 PC에 인터럽트 처리 루틴의 시작 주소를 저장하여 인터럽트 처리 인터럽터 벡터 테이블을 참조하여 인터럽트 처리 루틴 주소..

OSTEP 16장

베이스와 바운드 레지스터는 메모리 낭비가 심함 → 스택과 힙 사이의 공간은 사용되지 않더라도 물리 메모리에 할당되기 때문이 문제를 해결하기 위해 세그멘테이션 등장세그멘테이션특정 길이를 가지는 연속적인 주소 공간→ MMU에논리적인 주소 공간인 세그먼트마다 베이스와 바운드 쌍이 존재 주소 공간에는 코드, 스택, 힙 세 종류의 세그멘트가 있다.세그멘테이션을 사용하면 운영체제는 각 세그멘트를 물리 메모리의 각기 다른 위치에 배치할 수 있다.사용되지 않는 가상 주소 공간이 물리 메모리를 차지하는 것을 방지할 수 있다.64KB 물리 메모리에 3개의 세그멘트(스택, 코드, 힙)과 운영체제용으로 예약된 16KB 영역이 존재현재 사용 중인 메모리에만 물리 공간이 할당됨바운드 레지스터에는 세그먼트의 크기를 저장가상 메모리..

운영체제(OSTEP) 2024.10.31

시스템 콜

시스템 콜시스템 콜은 유저 프로그램이 커널 기능을 사용할 수 있게 해주는 인터페이스 시스템 콜은 커널 모드에서 실행되며, 작업을 마치면 유저 모드로 전환된다.유저모드 VS 커널 모드유저모드매우 제한된 환경에서 명령어 실행 가능, 메모리 영역도 제한적으로 사용 가능커널 모드어떤 명령어도 실행 가능하며, 시스템 내의 어떤 메모리 위치도 접근 가능시스템 콜의 실행 과정 - PINTOS1. 응용 프로그램이 시스템 콜이 필요한 시점에 도달EX) 파일을 열기 위해 open() 함수 호출 // 여기서 open()은 래퍼함수// 경로 - PINTOS-KAIST/lib/user/syscall.c int open(const char *file) { return syscall1(SYS_FILESIZE, fd);}2...

커널

커널운영체제의 핵심 부분→ 시스템의 자원을 관리 프로세스 관리, 메모리 관리, 파일 시스템 관리, 장치 드라이버 관리, 하드웨어 자원 관리 등등커널은 사용자와 직접 상호작용 할 수 없다.⇒ 명령어 해석기를 사용하여 커널과 사용자가 상호작용함 대표적인 명령어 해석기가 쉘 프로그램 - 시스템이 최초로 구동될 때, 커널은 메모리에 적재되며, 메모리에 상주하면서 여러 기능 제공- 가상 자원과 물리 자원을 모든 사용자에게 할당 및 제어- 시스템 콜 인터페이스 제공 응용 프로그램과 커널 간의 인터페이스 제공- 입출력 관리 // 디스크 읽기/쓰기, 네트워크 통신, 키보드 입력, 화면 출력 등 포함- 추상화 제공 // 복잡한 작업들을 추상화하여 간단한 인터페이스 제공 Ex) 시스템 콜- 인터럽트 처리 // 하..

원자적 실행 (Atomic Operation)

원자적 실행이란중단 없이 실행되고, 중간에 다른 사람이 수정할 수 없는 즉, 한 번에 실행되는 ‘최소 단위 연산’을 의미병령 프로그래밍과 멀티 스레딩 환경에서 데이터 무결성을 보장 여러 스레드나 프로세스가 같은 데이터에 접근할 때 발생할 수 있는 충돌 방지 Ex) 특수 목적 명령어 ‘TestAndSet()원자적 실행 X인 경우void lock(lock_t *mutex) { while(mutex->flag == 1); mutex-> flag = 1;}1. 스레드 1이 while 실행 후, 스레드 2가 CPU를 선점2. 스레드 2가 while문을 실행하고, flag 값을 1로 수정3. 스레드 1이 다시 CPU를 선점하고 flag 값을 1로 수정-> 이 경우 스레드 1과 스레드 2가 공유자원에 동시..