본문 바로가기

분류 전체보기90

[OS] 교착상태 (Deadlock) 교착상태(Deadlock)란? 정상적인 시스템에서 프로세스는 요청 → 사용 → 방출 순서로 자원을 사용한다. 요청: 프로세스는 자원을 요청한다. 요청이 즉시 처리되지 않는 경우(ex. 다른 프로세스가 해당 자원을 사용 중인 경우) 프로세스는 자원을 얻을 때까지 대기해야 한다. 사용: 자원에 대한 작업을 실행한다. 방출: 자원을 방출한다. 자원의 요청과 방출은 시스템 콜이다. 예시로는 디바이스의 request()와 release(), 파일의 open() 과 close(), 메모리의 allocate()와 free() 등이 있다. OS가 관리하지 않는 자원의 요청과 방출은 세마포어에 대한 wait() & signal() 또는 뮤텍스 락의 획득과 방출을 통해서 이루어질 수 있다. 커널이 관리하는 자원을 프로세스.. 2021. 7. 7.
[OS] 세마포어 (Semaphore) 동기화 방법에는 여러 가지가 있으며 하드웨어적으로 해결하는 방법과 소프트웨어적으로 해결하는 방법으로 나뉩니다. 여기서는 소프트웨어적 해결 방안 중 하나인 세마포어에 대해 알아보겠습니다. 세마포어는 동기화 문제 해결을 위해 네덜란드의 컴퓨터 과학자 에츠허르 다익스트라(Edsger Wybe Dijkstra)가 제안한 소프트웨어 도구입니다. 추상적인 설명보다는 세마포어를 직접 사용하면서 차근차근 알아가봅시다. 세마포어의 구조는 한 개의 정수형 변수와 두 개의 동작으로 구성되어 있습니다. 두 개의 동작은 다음과 같이 불립니다. P = Proberen(test) = wait = acquire V = Verhogen(increment) = signal = release Proberen&Verhogen은 네덜란드어이.. 2021. 7. 7.
[OS] CPU 스케줄링과 스케줄링 알고리즘 CPU scheduling CPU 스케줄링(Scheduling)이란 어떤 프로세스가 CPU를 점유할지를 결정하는 것을 말한다. CPU 스케줄링의 목적은 시스템을 효율적이고 빠르고 공정(fair)하게 만드는 것이다. CPU 스케줄링은 다음과 같은 기준으로 평가될 수 있다. CPU 이용률(CPU Utilization): 단위는 % 처리율(Throughput): 시간 당 몇 개의 작업을 처리하는가? (Jobs/sec) 반환시간(Turnaround Time): 하나의 프로세스가 작업을 시작하고부터 종료할 때까지 걸린 시간 (sec) 대기시간(Waiting Time): 레디 큐에서 기다린 시간 (sec) 응답시간(Response Time): (보통 대화형 시스템에서) 사용자가 요청을 한 시점부터 응답이 나올 때까.. 2021. 4. 12.
[OS] 프로세스란? (프로세스와 프로세스 관리) 프로세스란? Program vs Process 프로그램 그 자체로는 아무 일도 할 수 없다. 프로그램은 그저 하드디스크에 저장되어 있는 하나의 파일, 즉 수동적인 존재일 뿐이다. 프로그램이 사용자에게 유용한 기능을 제공하기 위해서는 메모리에 로드되어서 프로그램 카운터(PC) 및 관련 자원의 집합을 가진 능동적인 존재로서 동작해야한다. 예를 들어 바탕화면에 있는 Word 프로그램은 그 자체로는 아무 의미가 없다. 우리가 마우스를 올려서 더블클릭을 하고 실행이 되어서, 흰 바탕에 커서가 깜빡거리는 순간 유용한 무언가가 되는 것이다. 그래서 프로세스는 비공식적으로 실행 중인 프로그램(Program in execution)이라고 불린다. 프로그램이 하나의 프로세스가 되는 과정은 다음과 같다. 사용자가 프로그램을.. 2021. 4. 11.
[OS] 임계구역과 경쟁상태 그리고 동기화 목표: 멀티 프로세스/쓰레드 환경에서 핵심적인 문제인 동기화가 무엇인지 살펴봅니다. BankAccount 예제를 통해서 경쟁 상태와 임계 구역 문제에 대해 알아봅니다. 쓰레드에 대한 기본 개념이 없으신 분들은 이 글을 참조해주세요. 경쟁상태와 임계구역 현대의 운영체제 대부분은 멀티 쓰레드를 지원합니다. 근데 이때 공유 자원(shared data)에 여러 쓰레드가 접근해 값을 수정하면 데이터의 일관성(consistency)이 깨지게 되는데, 이를 경쟁 상태(Race Condition)라고 합니다. 이 경쟁 상태를 해결하기 위한 것이 동기화(Synchronization)입니다. 예를 들어보죠. 하나의 은행 계좌(공유 자원)에 부모님은 돈을 입금하고 자식은 돈을 출금하는 상황을 코드로 구현해 보겠습니다. 우선.. 2021. 4. 10.
[정렬] 삽입정렬(Insertion Sort) 특징 구현이 간단하다 제자리 정렬이다 안정 정렬이다. 시간 복잡도가 O(n^2)으로 느리다. 기본 아이디어 i는 1부터 시작하여 n-1까지 늘려간다. array[0]부터 array[i-1]까지 정렬되어 있을 때, array[i]를 포함하여 정렬한다. array[i]를 뒤에서부터 순차적으로 array[i-1], array[i-2] ... 과 비교하다가 자기보다 작은 숫자가 나오면 그 뒤에 삽입한다. 아래 영상 참고 www.youtube.com/watch?v=OGzPmgsI-pQ 비교연산은 1 + 2 + 3 + ... + (n-1) 회 일어나고, 스왑 연산의 횟수도 비교 연산과 같으므로 시간 복잡도는 O(n^2) 파이썬 코드 def insertion_sort(array): for i in range(1, l.. 2021. 3. 28.