목록CS (27)
포도가게의 개발일지
고정소수점예를 들어, 64비트 숫자 123.456을 표현할 때, 정수부에 123, 소수부에 456을 할당합니다.구현부호비트(1) 정수부비트(31) 소수부비트(32) 부동소수점 (소수점의 위치가 고정되어 있지 않고 움직인다.)고정소수점 소수부비트가 한정적이라 작은 값을 표현하기에 표현에 부족함으로 생김.2진수로 인한 근사치로 저장하다보니 계산 miss가 될 수 있음.소수점 이하의 표현 차이 그러나 10진수에서 정확하게 표현되는 많은 소수점 이하 값들이 2진수에서는 무한 소수로 표현됩니다. 예를 들어, 0.1을 2진수로 변환하게 되면 무한소수가 된다.10진수는 기저수가 10(2와 5의 곱)이기 때문에 2나 5의 거듭제곱 분모를 가진 분수는 유한 소수로 표현될 수 있습니다. 반면, 2진수는 기저수가 2이기 때..
https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s19.html Regular Expressions Cookbook, 2nd Edition 4.19. Validate Password Complexity Problem You’re tasked with ensuring that any passwords chosen by your website users meet your organization’s minimum complexity requirements. Solution The following regular expressions check many … - Selection from www.oreilly.c..
🤭 소프트웨어 설계의 5가지 원칙 — SOLID 1. 단일 책임 원칙 (SRP; Single Responsibility Principle) 객체는 단 하나의 책임 만을 가져야 하고 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐 이어야 한다. 같은 이유로 변화하는 것끼리 묶고, 다른 이유로 변화하는 것끼리는 분리하라. 2. 개방-폐쇄 원칙 (OCP: Open-Closed Principle) 기존의 코드를 변경하지 않으면서(closed) 기능을 추가(Open)할 수 있어야 한다. 소프트웨어 엔티티가 확장에 대해 개방(Open)되어야 하지만, 변경에 대해서는 폐쇄(Closed)되어야 한다. 클래스 자체를 변경하지 않고도(Closed) 그 클래스를 둘러싼 환경을 바꿀 수 있어야 한다. 3. 리스코프 치환 원칙..
Race Conditions? - multi thread 환경을 구축하게 되면 동시성 문제가 항상 뒤따라 온다. - 여러 thread가 경쟁적으로 shared state에 접근한 탓에, 접근 순서에 따라 그 결과가 달라지는 상황을 의미 Atomic Operation - Race condition을 막기 위해서는 각 thread의 접근이 atomic하게 이루어져야 한다. atomic하게 이뤄진다는 것은 기능적으로 분할할 수 없거나 분할하지 못하도록 보증된 동작을 의미한다. - 동시성 프로그래밍의 가장 큰 숙제는 ‘공유자원 관리’일 것이다. 공유자원을 안전하게 관리하기 위해서는 상호배제(Mutual exclusion)를 달성하는 기법이 필요하다. 뮤텍스: 한 쓰레드, 프로세스에 의해 소유될 수 있는 Key ..
기본적인 입출력 제어 방식 - 예를 들어 하드디스크에서 메모리로 데이터를 이동시킨다. 이때 가장 기본적인 방식인 Programmed I/O(Polling) 방식으로 구현하면 하드디스크에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다. 위와 같은 방식은 CPU를 거쳐가기 때문에 한곳을 더 거쳐가는 지연시간도 있겠지만 가장 큰 문제는 입출력 시간 동안 CPU가 idle 상태로 대기하는 것이다. I/O 디바이스에 비해 CPU는 비교할 수 없을 정도로 고속이기 때문에 그 시간을 낭비한다는 것은 상당히 비효율적이다. 1. DMA( Direct Memory Access) why? - 입출력 시간 동안 CPU가 idle 상태로 대기하는..
Segregated list Allocator(분리가용리스트) - seg-list는 explicit의 개선 방법입니다. 할당이 해제되 가용 블록들을 크기별로 모아줌으로써 좀 더 빠른 search가 가능합니다. - explicit 방식과 동일하게 연결리스트를 만들지만 사이즈별로 만들어야 하기 때문에 여러개의 연결리스트가 필요합니다. 여러개의 연결리스트 포인터를 힙에 저장하여 특정한 사이즈의 메모리를 할당하고자 하면 해당 사이즈에 맞는 연결리스트로 이동하여 할당할 블록의 위치를 찾습니다. 할당하는 메모리의 사이즈를 나누는 단위는 정해지지 않았지만 대부분 2^n 단위로 나누게 됩니다. // Global var // seg-list를 table로 만들어줍니다. void *segregated_free_lists[..
Buddy System why? - 서로 다른 크기의 연속적인 페이지들을 빈번하게 할당 및 해제하는경우 외부 단편화가 생기는 단점이 있다. 남은 공간으로만 봤을 땐 충분해도 실제 커널이 요청한 사이즈를 처리할 수 있는 연속된 페이지가 없다는 의미이다. 버디 시스템은 이러한 외부 단편화를 줄이기 위해 탄생하였다. 이를 통해 연속적인 페이지 단위로 관리가 가능하다. 관리 메커니즘 부터 알아보자. how? 우선 버디 시스템에서는 order 단위로 페이지 할당을 요청한다. 이것은 2^n 단위로만 요청을 할 수 있음을 의미한다. 예를 들어, order 3에 해당하는 페이지를 요청하는 경우 8(2^3 )개의 연속된 페이지들를 요청하는 것이다. struct free_area{ struct list_head free_..
PintOS 후기 - 일단 항상 같은 패턴으로 프로젝트를 시작했다.. 이걸 어떻게해? 말이되?? 아니 가이드 자료가 이게 단가? -> 하고 2~3일 이론공부하고 스트레스 받으며 아무렇지 않게 하고 있는 나 자신을 볼 수 있었다 ㅋㅋㅋㅋㅋㅋㅋㅋ 이러한 패턴이 매 프로젝트마다 이루어 졌으며 project4에서는 1주일에 기간이 주어지는데 그중 3일은 나만의 무기 프로젝트에 할당되며 사실상 4일이 주어진다. 안타깝게도 완주를 다 못할거라 깨닫고 목표가 filesystem의 이해와 project123을 새로 구현한 filesystem에서 작동되게만 해보자는 목표로 진행하였고 file growth랑 subdirectory, soft link까지만 구현을 하기 위해 노력하였다. 최종적으로 194개의 몇개만 통과 되..