일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자료구조
- OS
- error
- 파이썬
- Redux
- 리덕스장바구니
- Operating System
- web
- codeup
- 정렬
- CPU 스케줄링
- memory
- 코드업
- Spring
- Java
- 타입스크립트
- 일상
- 프로그래머스
- 알고리즘
- 기초100제
- 분할메모리할당
- 백준
- C++
- react-redux
- 토이프로젝트
- react
- js to ts
- 공부
- 스프링
- 협업
- Today
- Total
목록Study (66)
감자튀김 공장🍟
페이지 교체 (page replace) 페이지 교체는 요청된 페이지가 메모리 프레임에 없고, 페이지를 로딩할 빈 메모리 프레임도 없는 경우, 현재 사용중인 프레임들 중에서 하나를 선택하여 비우고 이곳에 요청된 페이지를 로딩하는 과정이다. 비우기로 선택된 프레임을 희생 프레임(victim frame)이라고 부르고, 그곳에 저장되어 있다가 쫓겨나는 페이지를 희생 페이지(victim page)라고 부른다. 희생 페이지가 수정된 페이지(modified / dirty page)라면 하드 디스크에 스왑-아웃된다. 목표: 현재 작업 집합에 포함되지 않거나 가까운 미래에 참조되지 않을 페이지를 희생 페이지로 선택하여 페이지 폴트의 횟수를 줄이는 데에 있다. 최적 교체 알고리즘 (OTP) 가장 최적의 페이지 즉, 미래에..
페이징 페이징(paging)은 프로세스의 주소 공간을 페이지(page)로 불리는 고정 크기로 나누고 물리 메모리 역시 프레임(frame)이라고 불리는 페이지의 크기의 블록들로 분할하여, 프로세스의 각 페이지를 물리 메모리 상의 임의의 빈 프레임에 할당하는 메모리 관리 기법이다. 페이징은 메모리를 고정 크기의 페이지로 분할한다. CPU에 의존적이지 않기 때문에 쉽게 구현 가능하며, 시스템에 따라 페이지 크기를 설정할 수 있어 융통성이 높고, 세그먼테이션보다 메모리 활용의 측면에서 훨씬 우수하다. 단편화 외부 단편화가 아니라 내부 단편화가 발생한다. 내부 단편화는 프로세스의 코드, 데이터, 힙이 페이지 구분 없이 연속되어 있는 경우 마지막 페이지에만 생긴다. 페이징 구현 - 1. 하드웨어 지원 페이지 테이블..
세그먼테이션 세그먼테이션(segmentaion)은 프로세스의 주소 공간을 크기가 다른 여러 개의 세그먼트로 나누고 각 세그먼트를 하나의 연속된 물리 메모리 블록에 배치하는 메모리 관리 기법이다. 세그먼트는 프로세스 내에서 연관된 기능을 하는 코드나 데이트들의 블록으로 그 크기는 서로 다르다. 코드 세그먼트 : 프로그램 전체에 걸쳐 작성된 모든 코드들을 모아 하나의 논리적 단위로 구성 데이터 세그먼트 : 프로그램 전체에 걸쳐 선언된 전역 변수들과 정적 변수들을 모은 것 스택 세그먼트 : 함수가 호출될 때, 지역 변수나 매개 변수, 리턴값들을 저장하는 메모리 공간 동적 할당 세그먼트 : 프로세스가 실행 중에 동적으로 할당받는 메모리 영역 세그먼테이션의 구현 - 1. 하드웨어 지원 논리 주소 구성 컴파일러는 ..
고정 크기 할당 고정 크기 할당은 메모리를 파티션(partition)이라는 동일한 크기로 나누고, 각 프로세스가 실행될 때 1개의 파티션을 할당하는 기법이다. 예시 메모리 전체를 n개의 파티션으로 분할하고 프로세스가 실행을 시작할 때 각 프로세스에게 1개의 파티션을 할당한다. 동시에 실행시킬 수 있는 프로세스의 개수는 n개로 제한되어, n개의 프로세스가 실행 중일 경우 새로운 프로세스가 도착하면 프로세스 중 하나가 종료될 때까지 큐에서 대기한다. 문제점 프로세스가 파티션의 크기보다 작은 경우 메모리의 일부가 낭비된다. 프로세스가 파티션의 크기보다 큰 경우 처음부터 실행할 수 없다는 문제가 있다. 가변 크기 할당 프로세스의 크기가 모두 다른 것을 고려하여, 각 프로세스에게 프로세스와 동일한 크기의 메모리를..
메모리 할당 메모리 할당이란 운영체제가 새 응용프로그램을 실행시키거나 실행중인 프로세스가 메모리를 필요로 할 때 아래 그림과 같이 물리 메모리를 할당하는 정책이다. 프로세스의 코드와 데이터를 적재하기 위해 물리 메모리 영역이 할당되고, 프로세스의 실행 중 동적으로 스택이나 힙이 늘어날 때 이에 필요한 물리 메모리 공간이 할당되는데, 메모리 할당은 전적으로 운영체제 커널에 의해 이루어진다. 연속 메모리 할당 연속 메모리 할당은 각 프로세스에게 메모리 한 덩어리씩 할당하는 기법이다. 여기서 연속의 뜻은 모든 프로세스들이 연속된다는 의미가 아니라 할당받은 메모리가 한 덩어리처럼 연속된 메모리라는 의미이다. 연속 메모리 할당은 2가지로 구분된다. 고정 크기 할당 메모리를 파티션으로 불리는 고정 크기의 영역으로 ..
메모리(Memory) 메모리는 CPU가 실행할 프로그램 코드와 데이터를 저장하는 물리적 장치이다. 실행될 프로그램의 코드와 데이터는 메모리에 적재되고 프로그램의 실행 중 발생하는 데이터 역시 메모리에 저장된다. CPU는 메모리에 있는 코드와 데이터를 CPU 내부로 읽어 와서 계산하고 필요에 따라 결과를 메모리에 저장한다. 메모리 계층 구조 CPU 레지스터 (CPU registers) CPU는 현재 실행할 코드와 데이터, 혹은 다음에 실행할 몇 개의 코드와 데이터를 미리 저장하는 목적으로 레지스터를 가지고 있다. 캐시 메모리 (cache memory) 캐시 메모리는 주기억장치로 사용하고 있는 메인 메모리보다 더 빠른 메모리로서 CPU의 빠른 처리 속도에 맞추기 위해 도입되었다. 캐시 메모리가 있는 컴퓨터에..
교착상태의 정의 자원을 소유한 스레드(or 프로세스)들 사이에서 각 스레드는 다른 스레드가 소유한 자원을 요청하여 모든 스레드가 무한정 대기하는 현상 치명적인 포옹(deadly embrace)라고도 한다 교착상태의 사례 두 스레드가 임계구역에 진입하기 위해 2개의 락 LockA, LockB를 모두 필요로 하는데, 각 스레드가 락(lock)을 요청하는 경우이다. 교착상태는 단일 CPU나 다중 CPU를 가리지 않고, 락(lock)이나 자원에 대한 다중 스레드의 경쟁이 있는 한 발생할 수 있다. 교착상태 유발의 잠재적 요인 자원 : 교착상태의 발생지 자원과 스레드 : 한 스레드가 동시에 여러 개의 자원을 필요로 하는 경우 자원과 운영체제 : 운영체제는 한 번에 하나씩 자원을 할당 자원 비선점 : 할당된 자원은..
사전 설명 https://good-potato.tistory.com/61 상호배제 장치(mutual exclusion device), 동기화 프리미티브(synchronization primitive) : 상호배제를 기반으로 여러 스레드들이 공유 자원을 액세스하는 전통적인 스레드 동기화 기법 대표적인 동기화 기법 락(lock) 방식 : 뮤텍스(mutex), 스핀락(spinlock) wait-signal 방식 : 세마포(semaphore) 뮤텍스(Mutex) 뮤텍스는 잠김/열림(locked / unlocked) 중 한 상태를 가지는 락 변수를 이용하여 오직 한 스레드만이 자원을 배타적으로 사용하도록 하는 기법이다. 락이 걸려있는 경우, 임계구역에 들어가려고 하는 스레드가 락이 풀릴 때까지 블록 상태로 큐에서..
앞서 읽고 오기 https://good-potato.tistory.com/60 상호배제 : 멀티 스레드가 실행되는 환경에서, 한 스레드가 임계 구역을 진입하면 배타적으로 실행되도록 보장하는 기법이다. 상호배제를 포함한 프로그램 작성 임계구역 코드의 앞 뒤 부분에는 임계구역에 대한 상호 배제를 만들기 위해 임계구역 진입 코드(entry 코드)와 임계구역 진출 코드(exit 코드)가 반드시 있어야 한다. 일반 코드 - 공유 데이터를 액세스하지 않는 코드 부분 임계구역 진입 코드 (entry code) 임계구역에 진입하기 전 필요한 코드 다른 스레드가 임계구역에 들어가 있는지 검사하여 임계구역에 들어가 있는 스레드가 없는 경우 다른 스레드가 들어오지 못하도록 조치를 취함 만일 임계구역에 이미 들어가 있는 스레..
동기화의 필요성 동시에 여러 작업을 실행시키면 처리의 병렬성을 높여, 응용 프로그램의 실행 시간을 단축하거나, 사용자에 대한 응답시간을 낮출 수 있다. 한편으로, 다수의 작업들이 공유 데이터에 동시에 접근하면, 공유 데이터가 훼손되어 예상치 못한 문제가 발생할 수 있다. 공유 데이터에 대한 동시 접근을 해결하는 방법이 바로 동기화이다. 동기화 (Synchronous) 한 순간에 하나의 스레드만 공유 데이터에 접근하도록 한다. 한 스레드가 공유 데이터에 대한 접근을 완전히 마칠 때까지 다른 스레드가 공유 데이터에 접근하지 못하도록 제어한다. 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다. 바로 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 한다. 요청과 결과가..