CS
[운영체제] Locks #2
[운영체제] Locks #1 Lock에 대해서 알아보자 Lock이 필요한 이유 2개 이상의 tread가 동시에 공유 자원에 접근할 경우 race condition(병행성 문제)이 발생해서 결과를 예측할 수 없다. 따라서 공유 자원에 대한 동기화 메커 hyeo-noo.tistory.com 하드웨어적으로 lock 변수를 관리하는 instruction에 대해서 알아보자 CPU에서 제공하는 Atomic Instruction을 알아보자 Test and Set test-and-set을 사용한 Spin lock 사용 예 기존의 TestAndSet을 알기 전에는 flag 값이 0인지 확인하기 + flag 값을 1로 바꾸기와 같은 총 2가지 동작으로 나뉘어서 수행을 했다. 그래서 2가지 동작 사이에 context swi..
[운영체제] Locks #1
Lock에 대해서 알아보자 Lock이 필요한 이유 2개 이상의 thread가 동시에 공유 자원에 접근할 경우 race condition(병행성 문제)이 발생해서 결과를 예측할 수 없다. 따라서 공유 자원에 대한 동기화 메커니즘이 필요한데 그중 가장 일반적인 메커니즘이 Lock이다. Critical Section 공유자원에 접근하는 코드의 조각이다. Mutual Exclusion(병행성 해결) Critical Section은 하나의 부분인 것처럼 실행되어야 한다.(Atomically) Critical Section은 한 번에 하나의 쓰레드만 실행 가능하다. 다른 모든 쓰레드들은 Critical Section에 진입하기 위해서 현재 사용 중인 쓰레드가 종료될 때까지 entry에서 기다려야 한다. Lock의 ..
SystemSoftware - Exceptional Control Flow #3
SystemSoftware - Creating Processes #2 SystemSoftware - Creating Processes #1 OS에서 process를 만드는 방식에 대해서 알아보자 process는 fork()라는 syscall을 통해서 child process를 생성한다. fork를 호출한 process가 parent process가 되고,.. hyeo-noo.tistory.com 지난번에 이어서 Exceptional Control Flow에서의 Shells, Signals, Nonlocal jumps에 대해서 알아보자 Shell : processor를 생성해 주는 역할 shell의 종류 sh shell csh/tcsh bash shell : default Linux shell shell의..
[운영체제] Page Replacement Policy (페이지 교체 알고리즘)
[운영체제] Swapping #1 메모리 swapping에 대해서 알아보자 Swap : 필요한 주소공간 전체를 메모리에 올려 두는것이 아니라 그때 그때 필요한 것들만 메모리에 올리고, 필요없어지면 하드디스크로 내보내는 동작 Swap을 구 hyeo-noo.tistory.com Swap과 관련된 메커니즘에 이어서 page replacement policy에 대해서 알아보자 replacement의 목적은 Cache miss를 최소화하기 위함이다. Cache가 여기서 왜 나왔을까? > 메모리는 하드디스크의 cache역할을 하기 때문이다. Average Memory access time(AMAT) - 평균 메모리 접근 시간 AMAT = (Phit * Tm) + (Pmiss * Td) Tm : 메모리에 접근하는 시..
[운영체제] Swapping (가상 메모리)
메모리 Swapping에 대해서 알아보자 Swap : 필요한 주소 공간 전체를 메모리에 올려 두는 것이 아니라 그때그때 필요한 것들만 메모리에 올리고, 필요 없어지면 하드디스크로 내보내는 동작 Swap을 구현하는 방법들 Overlays : 코드의 일부분, 데이터의 일부분을 가져오고 내보내는 동작을 프로그래머가 수동으로 구현하는 방법 Process-level swapping : Process의 주소공간 전체가 메모리에 올라왔다가, 다른 process가 동작할 때 다시 제자리로 돌아가는 방법. Page-level swapping : Page단위로 디스크에서 가져왔다가 내려보내는 방법 Swap을 하기위한 공간 : swap space 디스크의 일부분을 swap space로 미리 설정을 해줌 swap space의..
Cache Lab csim.c #1
cache lab에서 csim.c를 통해 cache의 동작 방식을 시뮬레이션해보자! SystemSoftware - Cache Memory #1 cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시간이 오래될수록 다시 사용될 hyeo-noo.tistory.com cache lab을 하기 위해서 반드시 이해해야 할 개념이 있다. cache에 접근하기 위한 address bit의 구조 cache 메모리 자체의 구조 cache에 data를 mapping 하는 방식 해당 개념에 대해서 알쏭달쏭하다면 위 링크를 통해서 이해하고 오자! cache lab tar 파일..
SystemSoftware - Cache Memory #2
SystemSoftware - Cache Memory #1 cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시간이 오래될수록 다시 사용될 hyeo-noo.tistory.com cache write방식에 대해서 알아보자 Cache Write는 어떤 방식으로 동작할까? 만약 cache에 write를 했는데 hit가 발생한 경우 Write-through : cache에 데이터를 입력하고 메모리에 바로 작성한다. (cache와 메모리의 정보는 항상 같음) 비용이 많이 든다는 단점이 존재. Write-back : 일단 cache에 수정사항을 입력하고 메모리에는..
SystemSoftware - Cache Memory #1
cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시간이 오래될수록 다시 사용될 가능성이 낮아짐) Spatial locality(공간 지역성) : 최근에 접근했던 주소와 가까운 data가 미래에 다시 사용될 가능성이 높다. 아래로 갈수록 느리면서 용량이 크고 가격이 싼 저장공간이 위치한다. 위로 갈 수록 용량은 적지만 속도가 빠르고 비싼 저장공간이 위치한다. cache의 메모리 공간은 일정한 크기의 blocks으로 나뉘어진다. cache에서 읽어 들일 수 있는 크기를 일정한 단위로 지정하는 것이다. 위 그림을 보면 CPU가 14번 블럭을 요청했고 cac..
[컴퓨터 구조] Control Unit
[컴퓨터 구조] Instruction Set 컴퓨터의 Instruction set에 대해서 알아보자 Ex ) 3 + 6 = 9 Operands : '3', '6' Operator : '+' 명령어 사이클의 기본 상태 Diagram을 알아보자 Instruction fetch : 메모리에 있는 명령어를 가져오는 작업(Op.. hyeo-noo.tistory.com Instruction과 Operand설명 Micro-Operations이 무엇인지, 실제 control을 위해서 어떤 기법들이 사용되는지 알아보자 Micro-Operations 위 그림을 살펴보면 Instruction을 Fetch 해서 decoding 하고 Operand의 주소를 계산해서 Operand를 Fetch 하고(Multiple operand..
SystemSoftware - Creating Processes #2
SystemSoftware - Creating Processes #1 OS에서 process를 만드는 방식에 대해서 알아보자 process는 fork()라는 syscall을 통해서 child process를 생성한다. fork를 호출한 process가 parent process가 되고, 새로 생긴 process가 child가 process이다... hyeo-noo.tistory.com int wait(int *child_status) child를 reaping하기 위해서 명시적으로 child가 종료할 때까지 기다리는 syscall return : child의 pid 값 만약 int *child_status 가 null이 아니라면 문제가 발생한 것이다. 이때 여러개의 매크로를 통해서 어떤 문제가 발생했는지..