본문 바로가기

전체 글78

8.Main memory management(1)_용어와 개념리마인드 메모리 관련 글 메모리시스템 메모리는 cpu가 프로그램을 실행하거나 데이터를 참조하기위 해 필요한 정보를 불러오는 공간이다. 메모리 계층 구조란 메모리를 필요에 따라 여러가지 종류로 나누어 둔 것으로 위에서부터 CPU younsw.tistory.com 메모리(기억장치)의 종류 피라미드의 위쪽으로 갈수록 메모리 용량은 작아지고 비싸며 빠르고 아래로 갈수록 용량은 크고 저렴하지만 느리다. 캐시 레지스터는 HW(CPU)가 관리하고 메인 메모리, 보 조거 억장 치는 SW(OS)가 다룬다. 메모리를 배우기 전 백그라운드 용어 정리 Block 보조기억 장치에서 주기억 장치로 올리는 데이터의 최소 단위이며 OS에 따라 보통 1~4KB이다. 우리가 1bit을 가 필요하더라도 블록단위로 올라온다 word word는 주기.. 2021. 12. 30.
7.Deadlock Resolution 데드락의 개념 데드락은 위의 이미지처럼 어떤 프로세스들도 자신이 원하는 자원을 얻을 수 없어 일을 할 수 없는 상태를 말한다. Blocked/Asleep 상태 즉 프로세스가 특정 이벤트 또는 자원을 기다리는 상태에서 발생할 가능성이 없는 이벤트를 기다리는 경우 프로세스가 deadlock상태에 빠졌다고 한다. 시스템내에서 dealock에 빠진 프로세스가 있다면 시스템이 deadlock상태에 있다고도 말한다. 그럼 이전에 배운 Starvation 상태와 데드락 상태의 차이점은 무엇일까? starvation vs deadlock starvation 은 프로세스가 CPU를 기다리는 상태에서 운이 없게도 계속 자신보다 우선순위가 높은 아이들이 들어와 뒤로 밀리거나 하는 등의 이유로 CPU를 할당받지 못해 무한 대.. 2021. 12. 30.
[Project_1_THREADS]_Priority Scheduling_2 Priority Inversion 카이스트 핀토스 가이드 설명에서 Priority inversion은 어떠한 것이며 우리가 무슨 상황을 해결해야 할지 설명해 주고있다. 간략하게 말하자면 H, M, L의 우선순위가 있고 딱 한명만 사용가능한 자원 LOCK 이 있다고 했을때 처음에 L이 LOCK을 가지고 작업을 하는도중 H가 들어오면 L은 작업대는 H에게 넘겨주지만 자신의 LOCK은 들고가버린다. 그럼 H도 LOCK이 필요하다 했을때 L때문에 작업을 못하고 작업대를 양보한다. 대기리스트에 있던 M이 빈 작업대를 들어오고 M은 LOCK이 필요없기 떄문에 자신의 작업을 끝마치고 나간다. 그후 작업을 못하고 밀려난 L이 돌아와 작업을 마무리하고 LOCK을 반납하면 그제서야 H가 LOCK을 받아 작업을 마친다. 이.. 2021. 12. 30.
[Project_1_THREADS]_Priority Scheduling_1 1-2 과제 Priority scheduling과 Priority donation을 Pintos에서 실행하라 하나의 스레드가 레디리스트에 추가되었을 때 이것이 높은 우선순위를 가지면 현재 running중인 스레드는 즉시 이 녀석에게 양보를 해주어야 한다. 비슷하게 스레드가 lock, 세마포어 또는 Condition 변수를 기다릴때 가장 높은 우선순위를 가진 기다리는 중이던 스레드가 먼저 일어난다. 스레드의 우선순위는 높아지거나 낮아질 수있다. 그러나 우선순위가 낮아지게 되면 더 이상 높은 우선순위를 가 아니므로 CPU를 양보한다. 스레드의 우선순위 범위는 PRI_MIN(0)부터 PRI_MAX(63)까지이다. 초기 스레드의 우선순위는 thread_create()의 인수로 전달된다. 우선순위의 변동이 필요 .. 2021. 12. 28.
6.Process Synchronization & Mutual Exclusion Process Synchronization 동기화가 무엇일까? 우리가 사용하는 다중 프로그래밍 시스템에서는 여러 프로세스들이 독립적으로 동시 동작한다. 따라서 공유자원을 동시에 원할 경우? 문제가 발생할 수 있다. 즉 프로세스 동기화는 공유되는 자원을 두고 프로세스들 사이에 서로 겹치지 않게 동작을 맞추는 것/서로 정보를 공유하는 행위를 동기화라 한다. Asynchronous and Concurrent P’s 비동기적(Asynchronous)이라는 말은 프로세스들이 서로에 대해 모르는 것이다 병행적이라는 말은 여러 개의 프로세스들이 동시에 시스템에 존재하는 것이다. 문제는 병행수행 중인 비동기적 프로세스들이 공유자원에 동시에 접근 시 문제가 발생할 수 있다. Shared data/Critical data.. 2021. 12. 27.
[Project_1_THREADS]_ Alarm Clock 들어가기전 , 핀토스에서는 프로세스와 스레드를 동일시 하고있음을 알아두자 수정전 timer_sleep() /* devices/timer.c */ void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); while (timer_elapsed (start) < ticks) thread_yield (); } timer_elapsed(start)는 timer_sleep이 호출된 시점에서 tick이 얼마나 지났는지 반환하는 함수이다. tick(틱)은 컴퓨터가 켜지고 1ms 에 1씩 증가하는 값으로서 하드웨어에 달린 타이머에 의해 증가한다. Idle()은 레디리스트에 아무스레드도 없는경우 불러오는 함수로 스레드로 CPU가 얼마나 쉬고 있는지를 보여주기 .. 2021. 12. 27.