CS

    [OS] Thread #1

    [OS] Thread #1

    Thread 스레드가 뭘까? 왜 있는걸까? 싱글 프로세스는 멀티코어 CPU의 장점을 활용할 수가 없다. 새로운 프로세스를 만드는데는 많은 자원이 필요하다. (시간, 메모리 공간) 프로세스간의 통신 오버헤드가 크게 발생한다. 프로세스간에 context swiching 비용이 크다. 위와 같은 프로세스의 단점을 보완하기 위해서 스레드가 탄생했다. 하나의 프로세스는 여러개의 스레드를 가질 수 있다. 프로세스는 각자의 고유 메모리를 가지고 있기 때문에 프로세스 내부의 스레드들은 하나의 메모리 공간을 공유한다. 그리고 스레드는 각자의 program counter와 stack pointer를 가진다. 위 사진처럼 스레드가 많아질 수록 프로세스의 메모리 공간이 각각의 stack공간으로 채워짐을 알 수 있다. 그리고 ..

    [OS] Process #3 (Context Switching)

    [OS] Process #3 (Context Switching)

    Process의 context switching 우리는 컴퓨터가 다양한 프로그램을 동시에 실행시켜주는 것처럼 느낀다. 엄밀히 따지면 동시 실행이 아니다. CPU가 매우 빠른 속도로 프로세스들을 context switching을 시켜주는데 우리는 이 switching 순간을 절대로 느낄 수 없다. Context란? 프로세스가 수행되기 위해서 필요한 정보들이라고 이해하면 된다. Context는 주로 커널 내부에 존재하는 PCB(Process Control Block)에 저장되어 있다. (PCB는 linked list로 구성됨) 우리가 프로그램을 구동시키기 위해서는 프로세스를 생성해야 한다. 프로세스가 생성되면서 해당 프로세스만의 메모리 공간을 할당 받고 code, stack, heap, BSS 공간에 적절한..

    [OS] Process #2

    [OS] Process #2

    Process 프로세스의 상태 전이 표 프로세스는 Ready 상태일때 CPU를 할당받고 Running 상태로 상태전이가 일어난다. 이제 해당 프로세스는 CPU를 이용해 작업을 수행한다. 작업을 마치면 CPU를 반납하고 종료합니다. 만약 작업이 끝나지 않는경우 프로세스는 CPU를 반납하고 ready 상태로 다시 돌아간다. 만약 I/O 작업이 발생한다면 현재 CPU를 사용중인 프로세스는 Block 상태로 전이가 일어난다. I/O작업이 완료되면 해당 프로세스를 ready상태로 전이 시킨다. 작업이 종료되지 않았는데 CPU를 어떻게 반납을 할까? OS는 프로세스의 CPU독점을 방지하기 위해서 하드웨어로 구현된 timer interrupt를 발생시켜 프로세스가 특정 시간 간격동안만 실행할 수 있도록 한다. tim..

    [OS] Process #1

    [OS] Process #1

    Process 프로세스? 실행중인 프로그램을 프로세스 라고 한다. 프로그램은 생명이 없다. 하지만 프로그램이 실행이 되면 프로세스가 되고 프로세스는 프로그램이 종료될 때까지 생명활동을 이어간다. 프로그램이 실행이 되면 아래 그림과 같이 disk의 프로그램 정보가 memory로 load 된다. 프로그램에 속한 모든 정보가 memory로 load되는것은 아니다. OS는 프로그램 실행 도중 필요한 코드를 그때그때 load해서 사용한다. memory 공간은 Code, Data, BSS, Heap, void, Stack 공간으로 구성된다. Code : 프로그램 코드가 올라오는 부분 Data : 초기화된 전역 변수, static 변수 BSS : 초기화되지 않은 전역 변수, static 변수 Heap : malloc..

    Cache Lab trans.c #2

    Cache Lab trans.c #2

    cache lab에서 trans.c를 통해 행렬을 전치시키는 작업에 있어서 cache miss가 얼마나 달라지는지 시뮬레이션해보자! 이전 포스팅 Cache Lab csim.c #1 cache lab에서 csim.c를 통해 cache의 동작 방식을 시뮬레이션해보자! SystemSoftware - Cache Memory #1 cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명.. hyeo-noo.tistory.com 연관 포스팅 SystemSoftware - Cache Memory #3 SystemSoftware - Cache Memory #2 SystemSoftware - Cache Memory #1 cache memor..

    SystemSoftware - Cache Memory #3

    SystemSoftware - Cache Memory #3

    SystemSoftware - Cache Memory #2 SystemSoftware - Cache Memory #1 cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시.. hyeo-noo.tistory.com Cache 최적화에 대해서 알아보자 miss rate : cache에 찾고자 하는 정보가 없는경우. 예를 들어 hit 상태일 때 cache에서 정보를 가져오는 경우 1Cycle이 걸린다고 하면, miss 상태라면 memory를 참조해서 정보를 가져오게 되고, 이 때 약 100Cycle걸린다. (단순 비교를 위한 cycle 수) 따라서 hit가 ..

    [운영체제] Semaphore

    [운영체제] Semaphore

    운영체제의 병행성 기법 중 하나인 Semaphore에 대해서 알아보자 Semaphore는 정수 값을 가지는 객체라고 생각하면 된다. Sem_wait(), Sem_post()같이 Semaphore의 값을 조절하는 함수를 가지고 있다. 첫 번째 인자는 Semaphore객체, 두 번째 인자는 여러 개의 쓰레드에 의해서 공유되고 있다는 것을 의미, 세 번째 인자는 Semaphore값을 1로 초기화 하겠다는 뜻이다. Semaphore의 2가지 동작에 대해서 알아보자 sem_wait() Semaphore값을 1 감소시킨다. 값이 0 이상이라면 즉시 return 한다. 값이 음수가 된다면 wait상태에 들어가고, sem_post()가 호출될 때까지 wait 한다. 여러 개의 쓰레드가 sem_wait()을 호출한다면 ..

    [컴퓨터 구조] Addressing Mode

    [컴퓨터 구조] Addressing Mode

    [컴퓨터 구조] Instruction Set 컴퓨터의 Instruction set에 대해서 알아보자 Ex ) 3 + 6 = 9 Operands : '3', '6' Operator : '+' 명령어 사이클의 기본 상태 Diagram을 알아보자 Instruction fetch : 메모리에 있는 명령어를 가져오는 작업(Op.. hyeo-noo.tistory.com 명령어 set을 가져오기 위한 여러 주소 지정방식을 알아보자 Immediate mode : 명령어에 이미 operand가 있다. Register mode : 명령어에 operand가 있는 Register를 가리키는 게 있다. Direct memory mode : operand를 가진 메모리의 주소가 있다. Register indirect mode :..

    [컴퓨터 구조] Instruction Set

    [컴퓨터 구조] Instruction Set

    컴퓨터의 Instruction set에 대해서 알아보자 Ex ) 3 + 6 = 9 Operands : '3', '6' Operator : '+' 명령어 사이클의 기본 상태 Diagram을 알아보자 Instruction fetch : 메모리에 있는 명령어를 가져오는 작업(Op code) bring 대신 fetch를 사용한 이유 : CPU가 원하는 명령어의 주소를 메모리에 주고, 해당 주소에 있는 명령어를 받아오는 작업이기 때문에. Instruction operation decoding : 가져온 명령어를 해석한다. Operand의 주소를 계산해서 Operand를 메모리로부터 가져온다. Data Operation : 가져온 Operand와 Op code를 통해서 Data를 계산한다. Data의 계산 결과를 ..

    [운영체제] Locks #3

    [운영체제] Locks #3

    [운영체제] Locks #2 [운영체제] Locks #1 Lock에 대해서 알아보자 Lock이 필요한 이유 2개 이상의 tread가 동시에 공유 자원에 접근할 경우 race condition(병행성 문제)이 발생해서 결과를 예측할 수 없다. 따라서 공유 자원에 hyeo-noo.tistory.com 지금까지의 방법들은 매우 비효율적이다. 왜냐하면 lock을 얻기위해서 spin-wait를 하게되는데, 이러한 방식은 CPU를 불필요하게 계속 소모해서 다른 활동을 하지 못하기 때문이다. 따라서 위 문제를 해결할 수 있는 방법들을 알아보자 Just Yield 가장 간단한 구현 방법이다. 만약 lock이 사용중이라면 깔끔하게 CPU를 반납하고 다음 time-slice에 자신의 차례가 올 때까지 기다리는 방법이다. ..