전체 글 50

[Computer Architecture] Processor - 2

앞서 살펴봤듯이 RISC-V Instructions들은 보통 아래 다섯가지 steps으로 구현된다. 1. IF : Fetch instruction from memory 2. ID : Read registers and decode instruction 3. EX : Execute operation or calculate address (← ex. ALU 쓰는 부분) 4. MEM : Access an operand in data memory 5. WB : Write the result into a register > Single Cycle execution 우리가 이전 글에서 만들었던 single clock cycle 버전은 위처럼 돌아간다. 한 instruction을 clock 한번내에 단계별로 진행한다...

[Software Design] Physical Architecture Layer Design

Physical Architecture Layer Design도 requirements가 가장 기본이다. 특히 non funcitonal Requirements를 기초로 디자인한다. 우선 Physical Architecture Layer Design의 기본 요소들을 알아보고, 글의 마지막쯤에 어떤 requirements일때 어떻게 설계하는게 좋은지 알아본다. 대부분의 현대 System들은 한 컴퓨터에만 존재하는게 아니라 network를 통해 여러 computers에 분산돼있다. (그냥 한 컴퓨터 안에서만 돌아가는 standalone system은 요즘 찾기 어렵다.) Physical Architecture Layer는 다음을 명시하는 layer이다. 1. 이전 단계들에서 만든 System의 SW 부분을 ..

[Software Design] Human-Computer Interaction Design

지금까지 PD Layer에 집중했는데, 이 글에선 HCI Layer, 특히 그 중에 GUI에 대해 집중적으로 알아본다. 초반에 Analysis 단계에서 Use-Case Diagram에서 actor와 use-case 사이에 그려졌던 선들은 System의 Interface를 의미한다. User actor와 연결된건 user-Interface를 의미하고, 외부 system actor와 연결된건 system-interface를 의미한다. Use Case를 사용하려면 PD와 User 사이에 interface가 필요하다는 말이다. Interface Design은 우리가 만드는 system이 어떻게 외부와 어떻게 상호작용할지를 정의한다. 머신간의 interface인 (1)System Interface와 머신-사람 i..

[Software Design] Class and Method Design

어떤 Layer든 Class와 Method Design은 기본으로 들어가있다. 이런 Class/Method를 Design하는 것에 대해 자세하게 알아보자. 구현전에 Design은 무조건 선행돼야한다. Design Criteria design을 평가하기위한 몇가지 방법?이다. 1. Coupling : class/object/method들간에 가까운 정도를 판단한다. classes간에는 간단하게 message를 보낼 수 있나, 즉 association관계에 있나로 판단한다. 낮아야 좋다. 2. Cohesion : 한 class의 attributes나 methods가 단일 object를 지원하는지 확인해야한다. general하게 말하자면 Class든 Method든 같은 개념을 말해야 cohesion이 좋은 것..

[System Programming] Thread & Mutex Lock

이 글에선 Thread와 Mutex Lock에 대해 알아본다. 우선 Thread가 무엇인지 알아보자. 일단 Multi proecessor는 고려하진 말자. Thread는 Single Processor일때도 있던 개념이다. UNIX OS에서 계산기 프로그램을 실행시켰는데 시계가 작동하지 않는다면 사고다. 우리는 어떻게 여러 작업을 동시에 처리할 수 있는지에 대해 기술적인 고민을 할 수 있다. 예를들어 실제로 우리가 웹 브라우저로 특정 웹사이트에 들어갔는데 데이터가 많을 수 있는데, 이럴때 우리 웹브라우저는 하나씩 다운로드 받지 않고, 병렬로 여러 데이터를 다운받는다. client인 우리 웹부라우저만 이러는게 아니라 web sever도 data를 병렬로 보내준다. 이게 딱히 새로운건 아니다. 예전 글에서 f..

[System Programming] Semaphore

이번에는 Inter Process Communication 수단? 이라기보단 IPC 보조 수단인 Semaphore에 대해 알아본다. 우선 앞서 배운 shared memory의 문제점을 짚어보고, Semaphore의 필요성을 알아보자. 사실 shared memory든 뭐든, 공유자원은 동시에 접근할 경우 문제가 생기기쉽다. 특히 특정 자원에 여러 processes가 동시에 write를 하는 경우 그렇다.(write하는게 한 놈 뿐이라면 아마 문제가 없지 않을까 싶음) 예를들어 특정 shm의 초기값이 0일때 해당 shm에 대해 동시에 두 프로세스에서 각각 100000번씩 +1을하는 loop를 돌리면 200000이 나와야하겠지만, 실제론 그렇지 않을 수 있다는 말이다.(실제로 test해보려면 loop문 안에서..

[System Programming] Barrier

Barrier의 개념이나 구현을 완전히 자세하게 하진 않고, 간단하게 개념을 알아본 뒤, IPC 중 하나인 SIGNAL을 이용해서 간단하게 구현해보자. > Barrier란? 간단히 말해서 동기화 도구 중 하나이다. 같은 작업을 여러 processors가 나눠서 진행중이라면, 다른 놈들보다 먼저 본인의 일을 끝내는 processor가 나오기 마련이다. 그럴때 같은 일을 하는 다른 모든 processors가 일을 끝마칠때까지 기다리도록 하는 것이 barrier이다. 위 예시처럼 특정 작업이 끝나고 다른 작업을 시작해야할때 적용할 수 있다. SIGNAL을 이용해서 이런 기능을 하도록 하려면 어떻게 해야할까? 0. 일단 모든 processors는 미리 정해둔 SIGNAL을 받아서 카운트를 하도록 signal h..

[System Programming] Inter Process Communication(IPC)

앞서 배운 pipe/named pipe나 signal도 process간 통신 수단 중 하나이다. 이 글에선 다른 IPC 관련 명령어/함수들을 알아본다. 여기선 아래 두가지 IPC 수단을 추가로 배운다. 1. mesasge queue를 이용한 IPC 2. shared memory를 이용한 IPC 이외에도 file lock, semaphore, socket, 일반 file 등등.. IPC 관련 개념/system calls가 많긴한데 여기선 위 두가지만 배운다. (pipe도 결국 위 두 개념에 속하는게 아닌가? → 말만 보면 그런 것 같긴한데, UNIX/LINUX에서 위 두가지를 전문적으로 해주는 기능이 존재함. pipe도 IPC는 맞지. pipe/message queue/shared memory 다 따로따로..

[Software Design] Moving to Design

앞서 과정까지 우리는 분석을 위해 requirements를 기반으로 여러 Analysis 모델을 iterative/incremental하게 만들었다. 분석에서 business needs를 정했다면, 디자인에선 어떻게 system을 만들지에 집중한다. 분석 과정을 통해 우리가 만들/보완할 system이 어떤 기능을 어떤 흐름으로 해야하는지, 내부구조가 어떻게 되는지, 각 class/object들이 어떻게 상호작용하는지를 알았다면,, 이제는 구현으로 넘어갈 수 있도록 Analysis 모델을 Design 모델로 발전시켜나가야한다. (특히 Class D를...) 이 글에선 그런 Design 과정의 전체적인 흐름을 보도록 하겠다. Design 과정의 특징은 다음과 같다. 1. 구현을 위한 청사진을 제공한다. 2...

[System Programming] pipe 공부

pipe는 UNIX system IPC(InterProcessCommunication) 중 하나이다. 즉, Process간 통신을 할때 사용된다. > File Descriptor file descriptor란 process가 file을 다루기위해 사용하는 개념으로 0 이상의 정수값을 갖는다. processor가 생길때마다 각 processes는 각자 file descriptors (목록)을 가진다. process는 file에 직접 접근하는게아니라 이 file descriptor을 통해서 지정된 file에 접근한다. 그럼 이제 processor가 file을 open할때마다 사용하지 않는 file descriptor 숫자 중 "가장 작은 값"과 해당 file을 연결(?)해서 접근할 수 있게 해주는 것이다. ..