목록CS (27)
포도가게의 개발일지
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. 리스코프 치환 원칙..
객체지향프로그래밍이란? - OOP (Object-Oriented Programming)이란 객체 지향적인 프로그래밍. 즉, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것이다. - 객체의 관점이 뭘까? 그 객체가 특정한 목적을 위해 필요한 데이터(필드)나 기능(메소드)를 하나로 묶는 것을 의미한다. 객체가 뭘까? - 객체는 컴퓨터 자원인 데이터(필드)와 기능(메서드)를 class로 캡슐화(묶어)한것 why? 개발자가 방대해진 코드를 좀 더 간편하게 유지보수하기 위해 캡슐화 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미한다. 따라서 클래스를 우리가 만들 떄 훗날 이 클래스에서 만들어진 객체가 특정한 목적을 잘 수행할 수 있..
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개의 몇개만 통과 되..