• Deadlock
    • 몇몇 스레드는 자원 경쟁을 함
    • 대기중인 스레드가 다른 대기중인 스레드가 점유한 자원을 요청하여 계속 waiting state에 머무르는 상황을 deadlock이라 함

 

 

  • Livelock
    • Deadlock과의 유사점
      • 둘 아시아의 스레드가 진행되지 않음
    • Deadlock과의 차이점
      • fail되는 action을 지속적으로 시도 -> CS에 진입할 때까지 계속 반복
      • block X, progress X
      • 예시) 두 사람이 복도를 지나가는 상황 발생 -> 두 사람이 멈춰있지 않고(block X),  좌우로 피해가려 하지만 진행은 안됨(progress X)

 

 

  • Livelock 회피방법
    • 각 스레드가 random 시간에 retry 하도록 함
    • 이더넷 네트워크에서 네트워크 충돌 시 취하는 해결법
    • 충돌 후 바로 재전송하지 않고, 재전송 전에 random 기간동안 물러남
    • deadlock보다 덜 일반적으로 발생하고 특정 스케줄링 상황에서만 발생 가능

 

 

    • Deadlock 특징
      • Necessary Conditions(교착 상태 발생의 필요 조건)
        • 아래 4가지 조건을 동시에 만족하면 deadlock 임 (아래 조건들은 독립적인 조건은 아님)
        • Mutual exclusion (공유자원은 deadlock 아님, 해당 자원을 어떤 스레드가 요청했을 때 해당 자원이 release될 때까지 요청 스레드가 delay되어야 함)
        • Hold and wait (스레드가 어떤 자원을 hold하면서 또 다른 자원을 요청하면서 wait하는 상황)
        • No preemption (선점 X)
        • Circular wait (wait이 circle을 이룸) 
      • Resource-Allocation Graph (교착 상태의 기술 방법)
        • deadlock은 방향 그래프로 더 정확히 기술 가능함

deadlock 아님

 

deadlock 발생

 

 

  • deadlock 처리 방법
    1. 무시하고 deadlock이 일어나지 않은 척 하기 (성능이 저하되면 재부팅되거나 deadlock이 발생한 스레드들만 중지) -> 대부분의 OS(윈도우, 리눅스 등)에서 사용중인 방법
      • 실행되지 않는 스레드를 멈추고 다시 시작
    2. deadlock 예방/회피 프로토콜 사용 -> deadlock 상태가 되지 않도록 보장
      • 예방: 4가지 필요조건 중 최소 하나가 성립하지 않도록 보장 (단점: 장치 이용률 저하, 시스템 처리율 감소)
        1. Mutual exclusion: 자원이 share할 수 있도록 하면 됨 -> 어떤 자원은 근본적으로 공유 불가 -> 해결 x
        2. Hold and wait: hold와 wait을 동시에 하지 않도록 함  
          • 각 스레드가 실행 전에 모든 자원을 요청하고 할당하도록 함 -> 자원 요청의 동적인 특성으로 비현실적
          • 자원을 갖고 있지않을 때만 요청하도록 함 -> 스레드는 자원을 추가로 요청하기 전에 현재 할당된 자원을 해제해야 함
          • 단점: 자원 이용률 저하, 기아(여러 자원을 요청한 경우 필요 자원 중 최소 하나가 항상 다른 스레드에 할당 -> 무한 대기) 발생 가능
        3. No preemtion: 자원 선점을 허용
          • 즉시 할당 불가능한 추가 자원을 요청시 hold한 모든 자원을 뺏김
          • 상태가 쉽게 save되고 나중에 restore되는 자원들에 적용됨
          • deadlock이 흔히 일어나느 자원에는 적용이 쉽지 않음
        4. Circular wait: chain을 끊음
          • 모든 자원 유형에 전체 순서를 매기고, 각 스레드가 열거된 오름차순으로 자원을 요청함
          • 자원을 비교하여 순서상 빠른 것을 결정하고 순서대로 요청하도록 함
      • 회피: 현재 요청에 대해 현재 가용자원, 현재 할당된 자원, 향후 요청/해제 등을 고려하여 요청 처리 결정
        • 시스템이 어떤 순서로든 각 스레드에 자원을 할당하고 deadlock을 피할 수 있다면 safe 
        • safe sequence가 있으면 시스템은 safe state
        • 스레드 Ti가 현재 가용자원 외에 Tj (j<i) 점유한 자원에 의해 만족된다면(Tj가 해제되어 Ti가 사용가능하다면) safe
        • safe sequence가 없다면 시스템은 unsafe state
        • unsafe state에서 deadlock state로 갈 수 있음                                         =>                       
        • 각 자원 유형의 인스턴스가 하나인 경우
          • 기존 자원-할당 그래프의 변형
          • 예약 간선(claim edge) 추가 => 점선으로 표현
          • 자원 요청은 claim edge가 assignment edge로 변환 시 cycle을 형성하지 않을 때만 허용됨
          • cycle이 발견된다면 unsafe state이므로 스레드는 요청이 충족될 때까지 wait해야 함
        • 각 자원 유형의 인스턴스가 여러 개인 경우
          • Banker's Algorithm (생략,,,, 나중에)
    3. 감지 및 처리기법
      • deadlock 발생 여부를 결정하기 위해 시스템 상태를 검사하는 알고리즘
      • deadlock으로부터 회복하는 알고리즘
      • Single instance: 각 자원 유형의 인스턴스가 한 개인 경우
        • wait-for graph: 자원-할당 그래프의 변형을 사용
        • wait-for 그래프에 cycleㅇ이 있으면, 시스템에 deadlock 존재
      • Several instances: 각 자원 유형의 인스턴스가 여러 개인 경우
        • Available: m개의 각 data type에 대한 가용 자원의 수
        • Allocation: 각 스레드에 현재 할당된 자원의 수
        • Request: 각 스레드가 현재 요청한 자원의 수
        • 완료되어야하는(=처리해야하는) 스레드들에 대해 모든 가능한 할당 순서를 조사함
        • 알고리즘 호출시기
          1. 할당 요청이 즉시 승인되지 않을 때마다 => deadlock을 야기시킨 특정 스레드 식별 가능 => overhead 문제 
          2. 일정한 시점마다 => overhead는 덜함 => 어느 스레드가 deadlock을 야기시켰는지 판단 불가

'cs 공부 > 운영체제' 카테고리의 다른 글

ch06. Process Synchronization  (0) 2023.06.26
ch05. CPU Scheduling  (0) 2023.06.12
ch03. Process, Threads  (0) 2023.06.11
  • 시스템은 일반적으로 동시에 또는 병렬로 실행되는 여러 스레드(수백 또는 수천)로 구성됨
  • 스레드는 종종 사용자 데이터를 공유함
  • 공유 데이터에 대한 접근이 제어되지 않을 때 race condition이 존재하여 데이터 값이 손생될 수 있음
  • 프로세스 동기화에는 race condition을 피하기 위해 공유 데이터에 대한 접근을 제어하는 도구를 사용함

 

  • Mutex Lock
    • 공유자원에 접근하기 위해 lock 필요
    • critical section(프로세스가 여러 개 있을 때 그 여러 프로세스들이 공유하게 되는 자원에 해당하는 코드 부분)에 들어갈 땐 lock을 얻어야 하고, 나오면 해제해야함

  • Mutex Lock의 단점
    • 한 프로세스가 CS에 있는 동안, 다른 프로세스가 계속 조건을 확인하며 loop를 실행해야 함 

 

  • Semaphore
    • Mutex Lock의 확장된 개념
    • 여러 자원에 대한 동기화 가능 
    • 공유변수 S를 사용
    • 공유자원이 여러 개인 경우 가용 자원의 수로 초기화됨
    • 공유자원이 하나인 경우 => Mutex Lock
    • 예) 공유자원이 3개인데 count 값이 -2인 경우: 3개는 사용중이고 2개의 프로세스가 대기중이라는 뜻

 

 

  • Monitors
    • 가장 high level
    • 프로그래머가 세마포나 뮤텍스 락을 잘못 사용하면 error가 쉽게 발생함
    • 간단한 동기화 도구들을 고급 언어 구조물로 통합하면 해결할 수 있음
    • ADT(abstract data type): 특정 구현과는 무관한 데이터와 데이터에 대한 연산을 캡슐화한 것
    • Monitor type(=ADT): instance의 state를 정의한 변수와 그 변수에 동작하는 함수 본체를 선언
    • Monitor type은 프로세스가 직접 사용 금지(class 개념)
    • 모니터 내부의 함수는 내부에 정의된 변수와 파라미터에 의해서만 접근 가능
    • 모니터 내부의 local 변수는 local 함수에 의해서만 접근(read/write) 가능
    • 모니터 내에서 한 번에 한 프로세스만 active함을 보장함

 

  • 동기화 메커니즘 필요
    • 프로그래머가 type condition 변수들을 정의 가능

 

 

  • Semaphore vs. Monitor

'cs 공부 > 운영체제' 카테고리의 다른 글

ch08. Deadlocks  (0) 2023.07.05
ch05. CPU Scheduling  (0) 2023.06.12
ch03. Process, Threads  (0) 2023.06.11

 

  • CPU 스케줄링 비교 기준
    • CPU utilization (CPU 이용률)
      • 가능한 CPU를 바쁘게 만들어야 함
      • 실제 시스템에서 40% ~ 90% 까지 가능함
    • Throughput (처리량)
      • 작업량 측정 방법
      • 시간 단위 당 완료된 프로세스의 수
    • Turnaround time (처리 시간)
      •  프로세스 실행에 소요되는 시간
      • 대기 시간 + 실행 시간 + I/O 시간 
    • Waiting time (대기 시간)
      • ready queue에서 기다린 총 시간
    • Response time (응답 시간)
      •  첫 응답이 시작되는 데까지 걸리는 시간
      • 요구 제출 ~ 첫 응답 까지의 시간

 

  • First-Come, First-Served Scheduling (FCFS)
    • 가장 간단한 CPU 스케줄링 알고리즘
    • CPU를 처음 요청한 프로세스가 CPU를 처음으로 할당 받음
    • 프로세스가 ready queue에 들어가면, 큐의 끝에 PCB가 연결됨
    • CPU가 가용해지면, 큐의 앞에 있는 프로세스에 할당됨
    • 단점
      • 프로세스의 대기 시간이 종종 꽤 김
      • Convoy effect (호위 효과): 모든 다른 프로세스들이 하나의 긴 프로세스가  CPU를 양도하길 기다림

 

  • Shortest-Job-First Scheduling (SJF)
    • 각 프로세스를 다음 CPU burst와 연관시켜서 스케줄링함
    • smallest next CPU burst를 가진 프로세스에 할당함
    • 두 프로세스의 값이 동일하면, FCFS가 적용됨
    • 프로세스의 전체 길이가 아닌, next CPU burst의 길이에 좌우됨
    • 주어진 프로세스 집합에 대해 평균 대기시간이 최소임
    • short 프로세스를 long 프로세스보다 앞으로 이동 => short 프로세스의 대기시간을 줄이고 long 프로세스의 대기시간이 증가
    • next CPU burst 길이를 알 수 없으므로, CPU 스케줄링 수준에서 구현 불가함
    • 하지만 값을 예측하여 구현 가능 (next CPU burst는 이전의 값과 비슷하다고 기대함, 측정한 이전 CPU burst의 길이를 지수평균하여 예측할 수 있음)
    • 선점 / 비선점 방식이 있음

 

  • Round-Robin Scheduling (RR)
    • FCFS 스케줄링과 유사함 
    • 시스템이 프로세스 간 전환이 가능하도록 선점이 추가됨 (FCFS + Preemption)
    • 원형 큐를 돌며 하나의 시간 할당량 동안 CPU를 할당함
    • 새로운 프로세스는 준비 큐의 tail에 추가됨
    • 준비 큐의 첫 프로세스 선택 -> 시간 할당량 후 interrupt 되도록 timer 설정 -> 프로세스를 dispatch 
    • RR 알고리즘의 성능은 시간할당량 크기에 크게 좌우됨
    • context swiitch time < time quantum(시간 할당량)
    • 시간할당량은 너무 커도 안됨, 너무 크면 FCFS로 퇴보함 => 프로세스의 80%가 시간 할당량 내에 끝나도록 설정해야 함

 

  • Priority Schedule
    • 우선순위는 각 프로세스와 연관, 우선순위가 높은 프로세스에 CPU 할당됨
    • 우선순위는 기준(내부적 요인: 시간 제한, 메모리 요구, 사용한 파일의 수, IO 대 CPU 비율, 외부적 요인: 프로세스 중요도, 비용, 작업 후원 부서, 정치적 요인)에 의해 정해짐

 

  • 우선순위가 낮은 일부 프로세스는 무한 대기할 수 있음
    • 해결방법 1) aging: 장시간 대기중인 프로세스의 우선순위를 점차 높여줌
    • 해결방법 2) Priority Scheduling + RR

'cs 공부 > 운영체제' 카테고리의 다른 글

ch08. Deadlocks  (0) 2023.07.05
ch06. Process Synchronization  (0) 2023.06.26
ch03. Process, Threads  (0) 2023.06.11
  • 프로세스(process)
    • 실행중인 프로그램
    • 작업의 단위(unit of work)
    • 시스템은 프로세스의 모음
    • 동시에 실행 가능

 

  • 프로세스의 메모리 레이아웃
    • Text section: 실행코드
    • Data section: 전역변수
    • Heap section: 프로그램 실행시 동적으로 할당되는 메모리
    • Stack section: 함수호출시 임시 데이터 스토리

 

  • 프로그램과 프로세스
    • 프로그램 자체는 프로세스가 아님
    • 실행파일이 메모리에 load될 때 프로그램이 프로세스가 됨
    • ex) 두 프로세스가 동일 프로그램과 관련
      • 두 개의 독립된 실행 순서로 간주됨
      • 창을 여러 개 열어놓는 경우, 같은 프로그램이더라도 여러 개의 독립적인 프로세스를 가짐
      • Text section은 동일, 나머지는 다름
      • 프로세스가 실행 중에 다른 프로세스를 생성할 수 있음

 

  • 프로세스의 상태
    • new: 새로 만들어진 상태
    • ready: cpu를 사용하기 위해 기다리고 있는 상태, 프로세서에게 할당되기 위해 기다리고 있는 상태
    • running: 실행중인 상태
    • waiting: 입출력이 필요하거나 어떤 이벤트가 발생한 경우(파일 접근 등) 기다리는 상태
    • terminated: 실행이 끝난 상태

  • 오직 한 프로세스만이 어떤 프로세스 코어에서 running 상태일 수 있음
  • 많은 프로세스들은 ready 와 waiting 상태에 있음

 

  • Process Control Block(PCB)
    • 프로세스가 가지는 상태정보를 저장하는 자료구조/공간
    • 특정 프로세스 관련 정보들을 포함
      • Process state: new, ready, running, waiting, halted 등
      • Program conter: 다음에 실행해야되는 명령어가 있는 위치(주소값)
      • CPU registers
      • CPU-scheduling information: process priority, pointers to scheduling queues, and any other scheduling parameters
      • Memory-management information
      • Accounting information
      • I/O status information

 

 

  • 프로세스 스케줄링(Process Scheduling)
    • 항상 프로세스들이 실행되도록 하여 CPU 이용률을 최대화함
    • 프로세스 사이에서 CPU core를 자주 switch => user와 program이 interact함
    • core에서 프로그램을 실행하기 위해 실행 가능한 프로세스를 하나 고름
    • 각각의 cpu core에서 한 번에 하나의 프로세스 실행
    • core 수 보다 프로세스 수가 더 많은 경우, 프로세스들이 wait해야 함

 

 

생략......(나중에)

 

 

  • 프로세스간 통신(Interprocess Communication)
    • 여러 프로세스는 OS에서 동시에 실행됨
    • independent
      • 프로세스는 시스템에서 실행중인 다른 프로세스와 데이터를 동유하고 있지 않을 때 independent임
    • cooperating
      • 프로세스는 시스템에서 실행중인 다른 프로세스와 영향을 주고 받을 때 cooperating임
      • 프로세스 협력(cooperating)의 이유: 정보공유 및 데이터 공유, 처리속도 높임, modularity
      • cooperating process는 interprocess communication(IPC) mechacism을 필요로 함

 

  • IPC 모델
    • shared-memory 모델
      • 메모리 영역 공유
      • 빠름
      • 충돌이 일어날 수 있으므로 프로세스들은 동시에 동일 위치에 쓰지 않도록 책임져야 함 (순서 제어 필요)
    • message-passing 모델
      • 메세지를 교환
      • 더 작은 양의 데이터를 교환할 때 유용함
      • 느림

 

 

생략......(나중에)

 

 

  • 스레드(Thread)
    • CPU를 사용하는 기본적인 단위 (즉, CPU 1개에 thread 1개가 올라감)
    • 프로세스 안의 제어 흐름
    • 동일 프로세스에 속하는 다른 thread들과 code, data, resource, file signal를 공유함
    • 한 번에 하나 이상의 task 실행 가능
    • ex) 웹 브라우저에서 하나의 스레드는 이미지나 텍스트를 표현하고, 또 다른 스레드는 네트워크에서 데이터를 검색할 수 있

 

'cs 공부 > 운영체제' 카테고리의 다른 글

ch08. Deadlocks  (0) 2023.07.05
ch06. Process Synchronization  (0) 2023.06.26
ch05. CPU Scheduling  (0) 2023.06.12

branch Instructions

  • 일반적으로는 순차적인 명령 수행을 위해, RV32I에서는 각 명령 후에 PC가 명령어의 크기만큼(4byte)씩 증가함
  • branch 명령어는 PC가 코드의 섹션을 건너뛰거나 이전 코드를 반복할 수 있도록 함
    • Conditional branch
      • beq (branch if equal) : if (a == b)
      • bne (branch if not equal) : if (a != b)
      • blt (branch if less than) : if (a < b)
      • bge (branch if greater than or equal) : if (a >= b) (단, a, b is signed)
      • bltu (branch if less than for unsigned) : if (a < b) (단, a, b is unsigned)
      • bgeu (branch if greater than or equal for unsigned) : if (a >= b)
    • Unconditional branch (ex. jump)
      • jal (jump and link)
      • jalr (jump and link register)

 


 

beq, bne, blt, bge, bltu, bgeu

 

 


 

slt, sltu, slti, sltiu

 

 

 


 

jal

 

 


 

Procedure (Function)

  • 프로그래머들은 프로그램을 짜기 위해 프로시저(또는 함수)를 사용함
  • 파라미터(인자)는 프로시저와 프로그램의 나머지 부분간의 인터페이스 역할을 함

 

 


 

jal - ret pair

 

 

 


 

jalr (jump and link register)

 

'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #2  (2) 2023.05.07
Lec4. RISC-V & RISC-V Instructions #1  (0) 2023.04.27
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25
Lec1. Computer and Technology  (0) 2023.04.25

CPU가 메모리에 접근하는 이유

  1. Instruction Access (Read)
    • 모든 CPU에는 실행중인 현재 명령어의 위치(주소)를 추적하는 특수 레지스터가 있음
    • 많은 CPU들이 Program Counter(PC)라는 동일한 용어를 사용함
      • X86는 예외, Instruction Pointer(IP)라는 용어 사용
      • RISC-V 또한 CPU 내부에 PC라고 하는 32bit의 특수 레지스터를 갖고있음 (Flip-Flop으로 구현)
    • 전원킬 때, 리셋시에 PC는 미리 정의된 주소로 초기화됨
    • PC가 미리 정의된 주소로부터 첫 번째 명령어를 읽어서 실행한 후엔 자동으로 inclement 됨 (자동으로 일정한 값만큼 증가, RISC-V는 4씩 증가, 각 명령어의 크기가 4byte이기 때문)
    • 각 명령어가 실행될 때(혹은 그 후에) PC가 업데이트됨
  2. Data Read/Write
    • 모든 것(코드 및 데이터)은 메인 메모리에 저장됨
    • CPU 내부의 레지스터는 제한된 용량을 가짐
      • CPU내부의 레지스터가 수용할 수 있는 것보다 훨씬 많은 데이터가 프로그램에 들어있음
      • RV32I의 경우 CPU 내부에는 32개의 범용 레지스터가 있음
      • 따라서 CPU는 적은 양의 데이터만을 레지스터에 즉시 저장 가능함
    • 따라서 RISC-V(및 다른 모든 CPU)는 메모리와 레지스터 간에 데이터늘 전송하는 명령을 제공해야 함
      • 이러한 명령어들을 memory access instruction이라 함
      • 메모리에 있는 데이터에 접근하기 위해서는, 데이터 전송 명령어가 메모리 주소를 제공해야 함

 

 


Word

  • 메모리와 레지스터의 크기를 word로 match
  • word는 특정 컴퓨터 설계에 사용되는 데이터의 natural unit을 나타내는 용어
  • data path의 크기
    • word는 단순하게 함께 처리되는 고정된 크기의 bit 그룹
    • word안에 bit의 수는 컴퓨터 구조의 중요한 특징
    • word의 크기는 컴퓨터 구조와 작동의 여러 측면에 반영됨
    • 컴퓨터에 있는 대부분의 레지스터는 보통 word 크기를 가짐
  • 현대 컴퓨터의 word 크기는 보통 32 또는 64bits
    • RV32I의 word 크기는 32bits(=4 Bytes)
    • x86의 경우, 컴퓨터가 64-bit CPU 기반임에도 불구하고 과거 호환성 이유로 인해 여전히 word 크기가 16bit임
    • Alignment restriction
      • word의 메모리 주소는 자연 word 경계(RV32I에서는 4의 배수)에 있어야 함

 

 

 

 


 

lw (load word)

 

 

 


 

sw (store word)

 

 

 

 

 


Byte, Half-word Load/Store

  • 대부분의 아키텍처는 메모리의 개별 byte(4bit) 또는 half-word(16bit) 주소를 지정하고 액세스할 수 있는 기능을 제공함
    • lb(load byte), lh(load half-word), lbu(load byte unsigned, 기본적으로 u가 없으면 signed임), lhu(load half-word unsigned), sb(store byte), sh(store half-word)
  • byte 주소를 지정할 수 있는 명령어
    • lb(load byte), lbu(load byte unsigned), sb(store byte)

 

 


 

lb

 

 


 

sb

 

 


 

Endianness

 

  • Big-endian machines
    • IBM 360/370, Motorola 68k, Sparc, HP PA
  • Little-endian machines
    • x86, DEC Vax, DEX Alpha, RISC-V
  • Endianness의 종류는 임의로 선택하는 것이지만 big-endian과 little-endian 컴퓨터 간에 데이터를 공유할 때에 번거로움이 발생할 수 있음

 

 

 

 


 

lui, auipc

 

 

 


auipc 사용 이유

 

 

 


Pseudo Instructions

  • RISC-V는 실제론 명령어 집합의 일부가 아니지만 프로그매어와 컴파일러 및 어셈블러에 의해 일반적으로 사용되는 유사 명령어를 정의함
  • 즉, 프로그래밍 편의를 위해 수도 명령어 제공함

'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #3  (0) 2023.05.07
Lec4. RISC-V & RISC-V Instructions #1  (0) 2023.04.27
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25
Lec1. Computer and Technology  (0) 2023.04.25

 

CISC vs. RISC

  • CISC (Complex Instruction Set Computer)
    • 하나의 instruction으로 여러가지(복잡한) 작업 수행
    • 가변 길이 instruction
    • 장점: program size 작음
    • 단점: cpu complexity 높음
    • ex) x86(Intel, AMD), Motorola 68k
  • RISC (Reduced Instruction Set Computer)
    • 각각의 instruction이 작은(단위의) 작업 수행
    • 고정 길이 instruction
    • 장점: cpu complexity  낮음
    • 단점: program size 큼
    • ex) RISC-V, Arm, MIPS

 


 

Instruction 종류

  • Data processing instructions (데이터처리 명령어)
    • Arithmetic and Logical (Integer)
    • 산술연산, 논리연산 등을 하기 위한 명령어
  • Memory access instructions (메모리접근 명령어)
    • Load/Store
    • cpu가 데이터를 메모리에서 레지스터로 가져오는 명령어, 레지스터 값을 메모리에 쓰기위한 명령어
    • 레지스터: 연산 전 잠깐 cpu에 가져오는 곳
  • Branch instructions (분기 명령어)
    • if, for, while 같은 조건문, 반복문이나 함수호출을 위한 명령어

 

 

 


 

Memory Hierarchy 

 

 

 

 

 


 

CPU 동작 방식

  • add x5, x6, x7                      # x5 = x6 + x7
    • x6과 x7은 피연산자, x5는 목적지
    • 산술 명령어의 피연산자는 cpu 내부의 register라고 불리는 특별한 위치로부터 옴
  • add x5, x6, 5                      # x5 = x6 + 5
    • 여기서 5는 immediate이며 숫자 5를 가리킴
    • 산술 명령어의 피연산자는 immediate field에서도 올 수 있음
  • 모든 cpu(x86, Arm, RISC-V)는 내부에 레지스터를 가짐
  • RISC-V는 32*32-bit 레지스터를 가지고 있음

 


 

RV32I Register File

  • 레지스터는 FF(Flip-Flops)로 구현되고 실행됨
  • cpu 내부의 구조적인 레지스터 집합(프로그래머가 볼 수 있는 / 알 수 있는)을 레지스터 파일이라고 부름
  • 레지스터 파일은 ff(이 수업에서 다룸) 또는 SRAM(실제 산업에서 쓰임)으로 구현 가능
  • RV32I 레지스터 파일은 32*32bit 레지스터를 가짐
    • 2 read ports
    • 1 write ports
  • 레지스터 파일에 대한 access는 메인메모리 또는 캐시에 대한 access보다 훨씬 빠름
  • 왜냐하면 레지스터의 수자 제한되어 있고, cpu 내에 있기 때문
  • 따라서 컴파일러들은 high-level 코드를 어셈블리 코드로 변환할 때 레지스터 파일을 사용하려 함

 

 


 

RISC-V Register Convention

 

 


 

RISC-V Instruction Formats

  • Arithmetic and Logical (Integer)
  • Load/Store
  • Jump and Branch

 

 


 

R-type Instruction

 

 

  • opcode
    • 7-bit (128 종류 나타낼 수 있음)
    • operation(ex. and, or, xor, +, -, load, store 등) code
  • funct7
    • 7-bit
    • opcode와 함께 명령어가 어떤 동작을 하는지 명시하는 부분
  • funct3
    • 3-bit
    • opcode와 함께 명령어가 어떤 동작을 하는지 명시하는 부분
  • rs1
    • 5-bit
    • register of the first sorce operand
  • rs2
    • 5-bit
    • register of the second sorce operand
  • rd
    • 5-bit
    • register of the destination operand
    • 레지스터의 개수가 32개이므로 32개 중 1개를 명시하려면 최소한 5-bit(2^5 = 32) 필요 

 

 


 

add

 

 

 


 

sub

 

 

 


 

I-type Instruction

 

  • R-type 명령어는 레지스터에 3개의 피연산자를 모두 갖고있음
  • I-type 명령어에서는 하나의 피연산자를 명령어 자체에 저장할 수 있음 => immediate(즉치값)
  • Immediate
    • 레지스터나 메모리 접근이 필요x
    • 12-bit의 immediate 필드는 2의 보수법을 사용하므로 -2^11 ~ 2^11-1로 값이 제한되어있음
  • R-type과 비교했을 때 funct7과 rs2가 없음

 


2's Complement Number

  • 2의 보수법은 부호가 있거나 없는 숫자의 덧셈과 뺄셈을 하는 편리하고 간단한 방법을 제공 
  • 2의 보수를 얻는 빠른 방법은 모든 bit를 뒤집고 1을 더하면 됨

 

 


 

addi

 

 

 


 

Logical Instructions

  • and, or, xor, andi, ori, xori
  • 논리 명령어는 2개의 source 피연산자를 bit 별로 연산하고 그 결과를 목적 레지스터에 기록함

 

 


 

R-type Instruction (and, or, xor)

 

 


 

I-type Instruction (andi, ori, xori)

 

 


 

Sign Extension

  • I-type 에서 immediate는 12bit임
  • 하지만 source 레지스터의 크기는 32bit임 
  • 따라서 12bit인 immediate를 32bit로 늘려줘야함
  • 이를 Extension이라함 
    • Zero-extension
      • 나머지 20bit를 전부 0으로 채움
      • (음수일 때) 숫자가 바뀜
    • Sign-extension
      • 12bit의 가장 앞 bit를 MSB(Most significant Bit)라 함
      • 이 MSB를 20bit에 전부 채워넣음
      • 숫자 바뀌지 않음
  • 일반적인 CPU에서 
    • arithmetic inst => SE 사용
    • logical inst => ZE 사용
  • RISC-V에서는 둘다 SE 사용 (ZE 사용하는 것이 큰 이점이 X)

 

 


 

Shifting

 

 


 

Shift Instructions

  • sll : shift-left logical
  • srl: shift-right logical
  • sra: shift-right arithmetic (sla는 없음, sll이랑 똑같음)
  • slli: shift-left loghical immediate
  • srli
  • srai

 


'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #3  (0) 2023.05.07
Lec4. RISC-V Instructions #2  (2) 2023.05.07
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25
Lec1. Computer and Technology  (0) 2023.04.25

 

컴퓨터의 성능을 측정하는 방법

  • Response time (응답 시간)
    • Execution time + Latency (실행시간 + 대기시간)
    • 작업이 시작되어서 완료까지 걸리는 시간
    • 개별 사용자에게 중요
    • 임베디드 컴퓨터 혹은 pc가 응답시간에 더 집중하는 편
  • Throughput (처리량)
    • 주어진 시간에 수행된 총 작업 개수
    • 데이터 센터 및 슈퍼 컴퓨터 관리자에게 중요
    • 서버는 throughput에 더 집중하는 편

 

 

 

  • 문제

 

  • 1) Sequential Laundry에서 Response time과 Throuput은?

 

더보기
  • Response time: 90 mins
  • Troughput: 0.67 (4/6) tasks / hr (= 90mins/task, 6 hours for 4 loads)

 

 

  • 2) Pipelined Laundry에서 Response time과 Throuput은?

 

더보기
  • Response time: 90 mins
  • Troughput: 1.14 (4/3.5) tasks / hr (= 52.5mins/task, 3.5 hours for 4 loads)

 

  • Pipelining
    • 파이프라인은 단일 작업의 응답시간에는 도움이 되지 않음
    • 파이프라인은 전체 workload의 처리량에 도움이 됨
    • 동시에 여러 작업을 처리
    • 파이프라인의 각 단계의 길이가 일정하지 않다면 속도향상이 저하될 수 있음
    • Potential speedup = # of pipeline stages

 

 

 

+ Recent posts