본문 바로가기

분류 전체보기282

[OS] 스핀락, 뮤텍스, 세마포어 임계 영역에 접근하는데 있어서 동기화를 위해 사용되는 기법인 스핀락, 뮤텍스, 세마포어에 대해서 알아보자. locks 방식을 이용한 동기화 기법 스핀락(spinlock), 뮤텍스(mutex) 상호 배제가 되도록 만들어진 lock 변수 사용 lock을 소유한 스레드만이 임계 영역에 진입할 수 있다. lock을 소유하지 않은 스레드는 대기한다. wait-signal 방식을 이용한 동기화 기법 세마포어(semaphore) n개의 자원을 사용하려는 m개의 프로세스(또는 스레드)의 관리 제공 자원을 소유하지 못한 프로세스(또는 스레드)는 대기(wait) 자원의 사용을 마친 프로세스(또는 스레드)는 알림(signal) 스핀락(Spinlock) lock 변수 true : lock을 잠근다, lock을 소유한다. fa.. 2021. 12. 22.
[OS] 공유 자원 접근 문제 공유 데이터의 동시 접근은 데이터의 불일치를 발생시킬 수 있다. Race Condition Race Condition이란 두 개 이상의 concurrent한 프로세스(혹은 스레드)들이 하나의 공유 자원에 접근할 때 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. Critical Section 임계 영역이란 공유 데이터를 접근하는 코드 영역을 의미한다. 이러한 임계 영역에 여러 프로세스가 동시에 접근한다면 위와 같은 race condition이 발생할 수 있다. 이를 방지하기 위해 둘 이상의 프로세스가 동시에 critical section에 진입하지 못하게 막아야 하는데 이를 Mutual exclusion(상호배제)라고 한다. Race Condition 해결을 위한 충족.. 2021. 12. 22.
[OS] 05. 프로세스 관리 1. 프로세스의 개념 실행 중인 프로그램을 의미 디스크에 존재하던 프로그램이 메모리에 올라가서 실행 되기 시작하면 프로세스가 된다. 프로세스는 CPU를 획득해 자신의 코드를 수행하기도 하고, 때로는 CPU를 반환하고 입출력 작업을 수행하기도 한다. 프로세스의 문맥(context)이란 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다. 여러 프로세스가 실행되는 시분할 시스템 환경에서는 타이머 인터럽트에 의해 짧은 시간 동안 CPU를 사용한 후 빼앗기는 식으로 CPU 관리가 이루어진다. CPU를 다시 획득했을 때 이전의 상태를 불러오기 위해 필요한 정보가 프로세스의 문맥이다. 프로세스의 문맥은 크게 세 가지로 분류된다. 하드웨어 문맥 : CPU의 수행 상태를 나타낸다.. 2021. 12. 21.
[OS] 04. 프로그램의 구조와 실행 1. 프로그램의 구조와 인터럽트 프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역이 메모리에 올라가 있어야 한다. 프로그램의 주소 영역은 크게 코드(code), 데이터(data), 스택(stack)영역으로 구분된다. 코드 : 프로그램 함수들의 코드가 기계어 명령 형태로 변환되어 저장되는 부분 데이터 : 전역 변수등 프로그램이 사용하는 데이터는 저장하는 부분 스택 : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 부분 인터럽트의 동작 원리는 함수의 호출과 비슷하다. A 프로그램이 CPU를 할당받아 명령을 수행중일 때 인터럽트가 발생할 경우 A는 현재 수행 중인 명령의 위치를 저장해놓는다. 그 후 인터럽트 처리루틴으로 넘어가 인터럽트를 처.. 2021. 12. 20.
[LeetCode] 436. Find Right Interval (Swift, Python) Find Right Interval - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 start 배열에 입력으로 주어지는 intervals 배열의 [i번의 start, i]와 같은 형태로 값을 담아주고 i번의 start를 기준으로 start 배열을 정렬한다. 그 후 intervals를 돌면서 end 값에 대해서 문제에 주어진 조건대로 start를 찾아주는 이분 탐색을 진행했다. 코드 [Swift] typealias startElement = (start: .. 2021. 12. 17.
1072. 게임 (Swift, Python) 1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시 www.acmicpc.net 풀이 이분탐색을 사용하여 해결하는 문제. 몇 번의 게임을 더 해야 하는지를 기준으로 잡으면 되는 간단한 문제였다. 간단한 문제인데 정답 비율이 낮았던건 Z를 구할 때 실수 연산에서 발생하는 오차때문인 것 같다. 처음 python으로 문제를 풀 때 Z를 구하는 식으로 다음과 같이 사용했다. Z = math.trunc((Y / X) * 100) 위와 같이 Z를 구했을 때 오답이 나왔는데 Y / X 연산에서 실수 관련해서 오차가 발생하기 때문이라는것 같다. 그.. 2021. 12. 16.