분류 전체보기 50

[Computer Architecture] Processor - 1

아래 사항들을 배운다. 1. Implementation of subset of core instructions 2. ISA가 구현에 끼치는 영향 3. 구현 방식에 따라 CPI나 clock rate에 끼치는 영향 (여기서 배우는 기본 개념들은 서버부터 임베디드 processor까지 모든 컴퓨터에 적용된다.) > Overview of Implementation 모든 instructions은 아래 두가지 공통 사항들을 출발점으로 진행된다. 1. PC에 저장된 주소가 가리키는 곳에 저장된 instruction을 memory에 올린다. 2. 양식에 맞게 register 1개 혹은 2개의 값을 읽어온다. 이후 진행 과정은 instructions 종류에 따라 다르게 진행된다. 하지만 RISC-V의 simplicity..

[System Programming] Shell 공부

Shell이 무엇인지 알아보고, Shell의 작동 원리를 카피해 비슷한 기능을 하도록 간단하게 구현하는 방법을 알아본다. 그 전에 기본이 되는 개념인 program과 process의 차이에 대해서도 간단하게 알아본다. Program : disk에 file로 저장된 machine instructions Process : memory에 올라와있는 machine instructions, CPU가 각 줄을 실행한다. (PCB라는 구조체가 현재 프로세스 정보를 담고 관리한다) file system이 disk의 file 정보들을 포함/관리 하듯이, User Space라는 것이 memory의 processes와 그 data 정보를 포함한다. 메모리는 사실 아래 그림과 같이 kernel space와 user space..

[System Programming] who 공부

`who` 명령어는 누가 현재 접속 중인지를 출력한다. 이걸 차근차근 구현해보자. (중간중간 유용한 정보 많음) 우선 who 명령어가 어떤 명령어인지 알아보려면, `man who` 명령어를 통해 who의 manual page를 볼 수 있다. 읽다보면 who 명령어가 `/var/run/utmp` 파일을 사용해 정보를 읽어와 출력한다는 것을 알 수 있다.(구체 경로는 아마 환경따라 다를거임) 교수님께서 알려주셨는데, 보통 `/var`에 시스템 로그 관련 파일들이 있다. utmp가 이젠 궁금하니, `man utmp` 명령어를 통해 utmp의 manual page를 보자. 참고로 utmp라는 keyword가 나오는 모든 manual page를 검색하고 싶다면, `man -k utmp` 명령어를 이용하면 된다. ..

[System Programming] File Systems 공부

Linux File Systems는 files과 directories의 collection이다. 우선 directory든 file이든 모두 Hard Disk에 저장된다. Hard disk는 Sector라는 기본 unit으로 나뉘어진다. 우리는 각 Sector에 번호를 부여함으로써 마치 하드디스크를 마치 큰 배열처럼 사용할 수 있고, 그런 점을 이용해 Linux의 파일 시스템은 아래와 같은 Layout을 띄게 된다. 1) The Supuer Block : File system 자체의 구조에 대한 정보를 담고 있다. ex. 각 area의 크기, 사용되지않는 data blocks의 위치 등등 2) The Inode Table : `struct inode`에 각 file의 정보(data 위치, size, Use..

Verilog 기초

이 카테고리의 이 글 바로 직전에 썼던 글에 잘못된 정보가 꽤 있었다. 당시에 수업을 두번정도만 듣고 나름 찾아보며 정리했던 글이라 그랬다. 내 개인적인 생각도 많이 들어갔었고, 애초에 잘못된 정보도 있었고... 그래서 어느 정도 배우고 중간고사가 지난 지금 다시 한번 정리해볼까한다. (기존 글은 필요한 내용과 핵심 내용만 여기로 가져오고 원본은 삭제함) 배경 우리가 아는 Java 같은 고수준 PL의 아래엔 무엇이 있을까? 무엇을 기반으로 했기에 그런 언어를 이용한 설계가 기능할 수 있는걸까? 갑자기 하늘에서 떨어진건 아닐 것이다. 그 기반을 살펴보기 위해 물리학까지 내려가자면 끝도 없을 것이고,, 납득할만한 수준에서 보자면 그 시작은 트렌지스터이다. 트렌지스터 없이 회로의 한 지점에서 다른 지점까지 정..

[Computer Architecture] Memory Hierarchy

(교수님께서 챕터5를 보고 챕터4를 하자고 하셔서 그 순서로 정리) programmers는 용량 제한없는 빠른 메모리를 원한다. 이 챕터를 통해 그 환상을 최대한 실현하는 법을 알아본다. 물론 계속 큰 메모리를 계속 빠르게 접근하는 것은 불가능하다. 자 그럼 그 기저에 깔린 원리를 알아보자. > Principle of locality 1. Temporal locality (locality in time) : 특정 item이 한번 referenced되면, 해당 item은 짧은 시간 내에 다시 referenced 된다는 것 2. Spatial locality (locality in space) : 특정 item이 한번 referenced되면, 해당 item의 주변 item들이 짧은 시간 내에 다시 refer..

[Software Design] Behavioral Modeling

이젠 OOSAD Analysis의 마지막 단계로 Behavioral(Dynamic) Modeling을 할 차례이다.(iterative가 기본이니 마지막이라고 하긴 좀 그렇긴 함) Behavioral model은 Structural Modeling과 마찬가지로 시스템을 내부에서 바라본다. 마찬가지로 Requirements, Use-Case, 이전 Model들(요구사항, use-case diagram, class diagram)을 기반으로 한다. 특정 기능이 어떻게 이루어지는지 보여준다. 주의할 것이 있는데, 절대 구현을 생각해선 안된다. 구현은 아직 뒤뒤 단계이다. 구현을 생각하는 순간 분석/디자인에 영향을 끼칠 수 밖에 없고, 그러면 우리가 고생해서 한 분석의 재사용이 어려워진다. analysts는 Pr..

[Computer Architecture] Arithmetic for Computers(2)

IEEE 754와 부동소숫점, 10진수2진수 변환 등을 다룬 글 > 시간나면 꼭 한번 읽어보기 : What Every Computer Scientist Should Know About Floating-Point Arithmetic 실수를 나타내는 방법 중 Scientific notations이란 것이 있다. 소숫점 왼쪽에 숫자가 하나만 있는 경우를 말한다. ex) 2.17x10^6, 0.7x10^(-1) 이런 Scientific notations 중 소숫점 왼쪽에 0이 아닌 숫자가 오는 경우를 Normalized 됐다고 한다. 이진수로 표현된 실수를 모두 Normalized form으로 변경하면 모두 아래와 같이 정형화(?)된다. 우리는 모든 실수를 위와 같이 표현할 수 있는 것이다. 어떻게 저장할까? ..

[Computer Architecture] Arithmetic for Computers(1)

앞서 Chapter 2까지는 interger에 대해서만 다뤘다. 이번 챕터에선 연산을 좀 더 깊이있게 다룬다. Addition and Subtraction 컴퓨터에서 덧셈은 그냥 사람이 계산하는 것처럼 계산한다. carry가 생기면 올려버리고,, 대신 2진수로 한다는 점이 좀 다르다. 또 음수는 2의 보수로 표현해서 덧셈으로 진행된다. 그리고 비트 수가 제한돼있어서 올라가는 carry가 비트수를 넘어가면 그냥 버려진다. 이렇게 연산결과가 hardware로 표현할 수 없는 경우를 overflow라고 한다. 2의 보수 인 경우 Overflow Detection 1. 덧셈에서 서로 다른 부호를 연산하면 절대 overflow가 발생하지 않는다. 2. 뺄셈에서 서로 같은 부호를 연산하면 절대 overlfow가 발..

[System Programming] ls 공부

directory 내의 files을 출력하는 ls를 구현하기위해선 우선 directory가 무엇인지 알아야한다. UNIX/LINUX에서 "file"은 byte들이 모인 것일뿐이다. 어떤 프로그램으로 해석을 하느냐가 그것에 의미를 부여할 뿐이다.(매우 당연한 관점같지만 UNIX에서부터 시작된 것이다.) LINUX에선 directory도 file로 취급한다. directory file엔 해당 directory 내부 정보나 다른 하위 directory 정보가 담긴다. 각 directory들은 tree구조로 엮인다.(뭐 node만들어서 엮고 하는 그런 특별한게 아니라 그냥 하위 directory 정보를 포함할 뿐이지 상위 directory 정보를 포함하진 않으니 tree 구조란 얘기인듯) 이제 System Ca..