반응형

전체 글 172

[OS] Lock

쓰레드는 서로 메모리를 공유하기 때문에 공통으로 사용하는 공유 변수가 존재한다. 여러 쓰레드가 모두 변수의 값을 read만 하는 경우에는 문제가 되지 않지만 특정 쓰레드가 변수의 값을 write 하게 되면 동기화 문제가 발생한다. 이를 해결하기 위해 한 쓰레드가 변수를 write 할 때에는 다른 쓰레드가 해당 변수에 접근할 수 없도록 lock 걸어주는 과정이 필요하며 lock부터 unlock 사이의 구간을 임계영역(critical section)이라고 한다. 임계 영역은 해당 영역 내의 명령어를 원자적으로 실행되도록 보장한다. ※ lock 관련 용어 임계영역(critical section) - 공유 자원에 접근해야하는 각 프로세스의 코드 영역으로, 다른 프로세스가 해당 영역을 수행하는 동안 수행되지 않아..

운영체제(OS) 2022.10.27

[OS] Concurrency

프로세스의 특성 OS에서 프로세스의 역할 중 첫 번째는 자원 소유의 단위이다. 자원이라는 것은 메모리, I/O device, 파일 시스템 등을 의미하며 프로세스마다 메모리에 서로 다른 공간을 할당하는 것이 그 예이다. 두 번째는 스케줄링의 단위이다. 문맥 교환은 프로세스 사이에 발생하면서 다음 실행될 프로세스를 선택한다. 하지만 이러한 프로세스의 두 가지 역할은 서로 독립적이다. 따라서 OS는 쓰레드라는 단위를 만들어 원래 프로세스가 하던 두 번째 역할인 스케줄링의 단위를 맡도록 정의하였다. Multi-thread OS가 하나의 프로세스 내에 여러 쓰레드를 지원하는 것을 다중 쓰레딩 (kernel-level multi thread) 이라고 한다. Window, Mac OS 등등 최신 운영체제는 모두 4사..

운영체제(OS) 2022.10.27

[OS] Page Placement Policy (페이지 배치 전략)

페이지 교체 정책 메모리의 모든 페이지 프레임이 사용되고 있는 상황에서 page fault가 일어나 새로운 페이지 프레임을 반입해야할 때, 교체 정책은 현재 적재되어있는 페이지 중 어떤 페이지를 교체시킬지를 결정한다. 모든 교체 정책의 목적은 교체되는 페이지가 가까운 미래에 참조될 가능성이 가장 적은 페이지가 되도록 하는 것이다. ※ 쓰레싱 (Thrashing) 쓰레싱이란 곧 사용될 페이지가 반출되는 일이 반복되는 현상으로 너무 잦은 page fault를 유발하여 I/O에 너무 많은 시간을 낭비하게 되는 경우가 발생한다. 따라서 합리적인 교체 정책을 채택하여 쓰레싱을 방지해야한다. 다양한 페이지 교체 정책 1. 최적 (Optimal) 미래에 참조될 때까지의 시간이 가장 긴 페이지를 교체 미래를 알아야하므..

운영체제(OS) 2022.10.26

[OS] 페이징(Paging) 기법

페이징(Paging) 기법 메모리 가상화에서 가상 주소와 물리 주소를 맵핑시킬 때 페이지 프레임을 단위로 하는 방식 고정 분할 및 가변 분할 기법은 각각 내부단편화, 외부단편화의 문제점 존재 페이징 기법은 마지막 페이지에서의 내부단편화 1회만 발생하므로 효율적 페이지 테이블(Page Table) 페이지 테이블에는 가상 주소, 물리 주소 뿐만 아니라 P, M 등의 Control bit들도 포함된다. P(present) 비트는 해당 페이지가 메모리에 위치하는가에 대한 비트이다. P 비트가 1인 경우 해당 페이지가 메모리에 올라와 있다는 뜻이고 0인 경우 디스크의 swap 영역에 있다는 것을 의미하며 page fault가 일어난다. M(modifiy) 비트는 해당 페이지가 메모리에 적재된 후 수정된 적이 있는..

운영체제(OS) 2022.10.26

[파이썬 라이브러리] Numpy

Numpy Numerical Python의 약자로 숫자로 이루어진 배열을 다루기 위한 파이썬의 라이브러리 파이썬의 list에 비해 규모가 큰 다차원 배열의 저장 및 처리에 훨씬 효율적 pandas 등 다양한 데이터 처리 라이브러리에서 사용됨 Numpy array의 생성 # numpy 사용하기 import numpy as np # numpy를 이용하여 array 정의하기 arr = [1, 2, 3, 4, 5] n_arr = np.array(arr) print(n_arr) # [1 2 3 4 5] Numpy array의 특징 Numpy 배열은 생성 이후 크기를 변경할 수 없음 => 변경이 있을 시 새로 생성해야 함 list보다 메모리 공간을 덜 차지함 Numpy 배열의 모든 요소는 같은 타입이어야 함 - 타..

[OS] 가상 메모리(Virtual Memory)

가상 메모리(Virtual Memory) 다중 프로그래밍 방식의 protection 문제를 해결하기 위해 가상 메모리 개념이 도입되었다. 이는 각 프로세스마다 가상의 메모리 주소 체계를 갖게하고 이를 실제 물리 메모리 공간과 맵핑 시키는 방식이다. 즉, 서로 다른 프로세스들의 가상 메모리 상에서의 주소가 같더라도 실제 물리 메모리에서는 다른 주소 공간을 가리키게 된다. 이러한 방식으로 process간 isolation을 보장하게 된다. 프로세스 실행 과정 1. 태스크 로딩 디스크에 저장되어 있는 파일은 stack과 heap을 가질 필요가 없기 때문에 text 영역과 data 영역으로 이루어져있다. 또한 디스크에 저장되는 파일은 disk block 단위로 나뉘어 저장이 되는데 보통 그 크기는 4KB이다. ..

운영체제(OS) 2022.10.18

[OS] 물리 메모리 관리 기법

초기 운영체제 1950년 ~ 1970년대의 초기 운영체제는 물리 메모리에 단 하나의 프로그램만 올리는 single programming의 형태였다. 즉, 메모리는 os 영역과 실행 중인 하나의 프로그램이 올라가는 영역으로만 구분되었으며 가상화 개념이 존재하지 않았다. 동시에 메모리를 점유할 수 있는 프로그램이 단 하나였기 때문에 multi-tasking이 불가능했다. Multiprogramming and Time Sharing 이후 Multiprogramming의 등장으로 동시에 여러 프로세스가 실행되는 것처럼 보이게 할 수 있게 되었다. os는 여러 프로세스를 매우 빠르게 전환하면서 실행하는데 이를 Time Sharing(시분할)이라고 한다. 이때 기존에 실행되던 프로세스의 상태를 디스크에 저장하게 되..

운영체제(OS) 2022.10.18

[OS] Scheduling

스케줄링 평가 기준 Turn around time(반환 시간) = 작업 완료 시간 - 작업 도착 시간 Response time(응답 시간) = 시스템으로부터 첫번째 응답이 온 시간 = 작업 시작 시간 - 작업 도착 시간 Fairness(공정성) = 얼마나 고르게 여러 프로세스에 cpu에 분배했느냐에 대한 척도 (성능과 상충) preemption vs non-preemption preemption(선점)은 다른 프로세스가 선점하고 있는 cpu를 빼앗을 수 있는 것을 의미하고 non-preemption(비선점)은 반대로 빼앗을 수 없다는 것을 의미한다. 여러가지 스케줄링 기법 현실적인 os가 아닌 다음의 가정을 따른다는 하에 성립되는 이론들 모든 task는 동일한 시간 동안에 실행된다. 모든 task는 동일..

운영체제(OS) 2022.10.17

[OS] Limited Direct Execution

Direct Execution direct execution이란 프로그램에서 어떤 코드를 돌리던지 os가 간섭하지 않는 것을 뜻한다. 즉, os가 pcb를 생성하고 인자를 stack에 할당해주는 초기 작업을 다 마친 후에 프로그램의 main()을 호출해서 실행함으로써 os에서 프로그램으로 영역이 넘어간 다음에는 어떠한 연산을 하더라도 간섭하지 않는 것이다. ​ 문제점 프로세스가 원치 않는 일을 하지 않는다고 보장할 수 없음 os가 이를 중단시키고 다른 프로세스를 실행시킬 수 없음(time sharing 불가) os가 실행 중인 프로그램을 제어하지 못하면 os가 아니라 라이브러리에 불과하다. 이러한 문제점들 때문에 os는 제한적 직접 실행(Limited Drect Execution) 방식을 따른다. Use..

운영체제(OS) 2022.10.17

[OS] Process Abstraction

프로세스(Process) 디스크에 저장되어 있는 실행 파일(프로그램)이 실행되어 메모리에 올라오면 이를 프로세스라고 한다. 이때 프로그램 전체를 모두 메모리에 올릴 수도, 필요한 일부만 메모리에 올릴 수도 있다. 프로세스의 구성 프로세스는 메모리에 위치하며 구체적으로 Text(Code), Data, Heap, Stack 영역으로 구분된다. Text(Code) : 코드 Data : 전역변수, Static 변수 Heap : 동적할당 Stack : 지역변수, 파라미터 프로세스는 자신만의 물리적인 메모리 공간을 할당받아 그 안에서 자신만의 가상 주소 체계를 갖는다. 일부 레지스터 또한 프로세스의 구성 요소인데 다음 명령어를 가리키는 Program Counter(PC), 스택 내의 특정 공간의 위치를 가리키는 S..

운영체제(OS) 2022.10.14
반응형