수업 42

[Network Programming] TCP socket 통신

> TCP API 호출 순서 TCP Server 1. socket #include int socket(int domain, int type, int protocol); 우선 socket을 생성하기 위해선 socket 함수를 사용해야한다. 첫번째 인자로는 만들 socket이 사용할 Protocol Family(프로토콜 체계) 정보를 전달하고, 두번째 인자로는 소켓의 데이터 전송 방식에 대한 정보를 전달한다. 마지막 인자로는 통신에 사용할 프로토콜을 전달한다. 세 인자 모두 프로토콜과 관련있다, 즉 생성할 socket이 어떤 프로토콜을 써서 통신할지를 인자로 줘서 socket을 만드는 것이다. 성공 시 생성된 socket의 file descriptor, 실패 시 -1 을 반환한다. > Protocol Fam..

[Network Programming] Network Socket Programming 개요/기초

이 과목에선 Socket을 통해 Application Layer의 프로그램을 개발하는 것을 중점으로 한다. OS에서 제공해주는 네트워크 관련 API(Application Programming Interface)를 활용하는 것이 주된 목표이다. Client-Server model을 주로 다루며, kernel level이 아닌 user-level programming을 한다. Socket을 생성해서 사용하면 Application 아래 Layer의 내용은 감춰진다. 즉, 응용 프로그래머는 이 Socket을 기반으로 Application 계층의 완성에 집중하게 된다. Client-Server model 1 : Iterative Server (with UDP) Client-Server model 2 : Concu..

[Network Programming] TCP/IP

Addressing (위 그림은 TCP/IP model 이다. 원래는 4계층으로 나뉘었는데, 요즘 저렇게 5계층으로 나누기도 한다고 함.) 각 계층마다 사용하는 address의 종류가 다르다. 예를들어 Data link layer에선 같은 Network 내 통신을 위해 랜 카드에 부여된 주소인 Mac address를 사용한다. IP Address Classes IP Address의 앞부분은 어떤 네트워크인지 나타내는데 쓰이고, 뒷부분은 해당 네트워크 내의 어떤 host인지 나타내는데 쓰일 수 있다. 그 영역의 크기에 따라 Class A/B/C로 구분한다. Class A의 네트워크가 가장 많은 host를 보유할 수 있다. 교수님께서 말씀하시길 경북대는 Class B라고 하셨다. 하지만 이런 방식은 공간 낭..

SHA-256

SHA-256 회로를 verilog로 설계하는게 디지털설계및실험 과목의 마지막 과제로 나왔다. 이를 설계하기 위해 공부했던 SHA-256 연산 과정을 간단하게 정리해볼까한다. SHA와 SHA-256이 무엇인지에 대한건 나무위키 보면 잘 나와있으니 생략하고.. 어떤 식으로 input을 암호화하는지 살펴보자. 진행하며 참고한 문서는 다음과 같다. 참고문서 Algorithm(간략) 우선 큰 틀부터 보자. SHA-256 algorithm에선 0보다 크거나 같고 2^64-bit 보다 작은 Message(표현은 16진수로 하기도 하고 ascii 문자로 하기도 함)라는 것을 Input으로 받고, 256-bit 2진수 숫자(마찬가지로 표현은 16진수로하거나 ascii문자로 하거나)를 Output으로 내놓는다. 즉, I..

[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문 안에서..