분류 전체보기
-
[운영체제] Process Management강의/운영체제-반효경 2024. 2. 17. 22:51
프로세스 생성 부모 프로세스가 자식 프로세스 생성 → 복제 트리 구조 형성 자원 운영체제로부터 받는다 부모와 공유한다 원칙적으로 공유하지는 않음 주소 공간 자식은 부모의 공간을 복사 자식은 그 공간에 새 프로그램을 올림 fork() → exec() fork()로 복제 후 exec()으로 새로운 프로그램을 메모리에 올림 프로세스 종료 exit 시스템 콜로 수행 자식이 부모에게 output 데이터를 보냄 (wait)→ 자식이 먼저 종료됨 abort 부모 프로세스가 자식의 수행을 종료시킴 자식이 할당 자원의 한계치를 넘어섬 부모가 종료되는 경우 운영체제가 부모 프로세스 종류 시 자식이 더 이상 수행되지 않도록 막음 프로세스 간 협력 독립적 프로세스 원칙적으로 하나의 프로세스는 다른 프로세스 수행에 영향 못 끼..
-
[운영체제] Process강의/운영체제-반효경 2024. 2. 17. 22:50
Process 실행 중인 프로그램 Context (문맥) : 특정 시점에서 어디까지 수행을 했는가 → PC가 어디를, stack, data, code에 어디까지 실행했는가, Register에는 어떤 값이 저장되어 있었는가 CPU 수행 상태를 나타내는 하드웨어 문맥 Register, PC 프로세스의 주소 공간 code, data, stack 프로세스 관련 커널 자료 구조 PCB Kernel stack : 여러 프로세스가 공유 → 프로세스마다 스택을 별도로 둠 프로세스의 상태(state) Running : CPU를 잡고 instruction 수행중 Ready : CPU를 기다리는 상태 (메모리에 올라와있어야함) Blocked (wait, sleep) CPU를 주어도 당장 instruction을 수행할 수 없..
-
[대규모 시스템 설계 기초] 1장 : 사용자 수에 따른 규모 확장성책/가상 면접 사례로 배우는 대규모 시스템 설계 기초 2024. 2. 17. 09:02
단일 서버 웹 앱, 데이터베이스, 캐시 등이 전부 한 대의 서버에서 실행되는 것 데이터베이스 사용자가 늘면 서버 하나로는 충분하지 않다 웹/모바일 트래픽 처리 용으로 하나, 데이터베이스 용으로 하나를 분리한다. 관계형 조인 연산 지원 MySQL, Oracle 등 비관계형 네가지 분류 키-값 저장소 그래프 저장소 컬럼 저장소 문서 저장소 아주 낮은 응답 지연시간(Latency) 다루는 데이터가 비정형 데이터를 직렬화/역직렬화 할수만 있으면 됨 아주 많은 양의 데이터를 저장해야함 위의 경우 NoSQL을 고려 수직적 규모 확장 vs 수평적 규모 확장 스케일 업 : 서버에 고사양 자원을 추가하는 것 스케일 아웃 : 더 많은 서버를 추가하여 성능 개선 트래픽 양 적을 때 → 스케일 업이 좋음 스케일 업의 한계 한..
-
[Refactoring] 12장 : 상속 다루기책/Refactoring 2판 2024. 2. 14. 11:45
메서드 올리기 // before class Parent { } class Child1 extends Parent { get name() {} } class Child2 extends Parent { get name() {} } // after class Parent { get name() {} } class Child1 extends Parent { } class Child2 extends Parent { } 부모에게는 없는데 자식에게만 중복되서 등장하는 필드, 메서드들이 있는 경우 이를 부모로 올려주는 것이 중복을 막을 수 있다. 만약 동작이 다를 경우, 템플릿 메서드 만들기를 고려할 수 있다. 필드 올리기 // before class Parent { } class Child1 extends Paren..
-
[Refactoring] 11장 : API 리팩터링책/Refactoring 2판 2024. 2. 14. 11:43
질의 함수와 변경 함수 분리하기 // before function getSomeDataAndSetAnother() { const result = func(); setAnother(); return result; } // after function getSomeData() { return func(); } function setAnother() { thie.field = 0; } 질의 함수 (읽기 함수) 는 어떠한 부수효과도 없어야 한다. 명렁-질의 분리 (Command-query seperation) 만약 읽기 함수 내에 무언가 다른 일을 하는 게 있다면, 바로 추출해주자. 함수 매개변수화하기 // before function addTwoTimes(number) { return number + numbe..
-
[Refactoring] 10장 : 조건부 로직 간소화책/Refactoring 2판 2024. 2. 14. 11:37
조건문 분해하기 // before if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd)) { charge = quantity * plan.summerRate; } else { charge = quantity * plan.regularRate + plan.regularServiceCharge; } // after if (summer()) { charge = summerCharge(); } else { charge = regularCharge(); } 복잡한 조건문은 코드를 어렵게 만드는 원흉이다. 코드를 부위별로 분해한 다음 코드 덩어리들을 의도를 살린 이름의 함수 호출로 바꿈 조건식 통합하기 // before if (someExp..
-
[Refactoring] 9장 : 데이터 조직화책/Refactoring 2판 2024. 2. 14. 11:35
변수 쪼개기 // before let temp = 2 * (height + width); console.log(temp); temp = height * width; console.log(temp); // after const perimeter = 2 * (height + width); console.log(perimeter); const area = height * width; console.log(area); 변수는 하나의 역할만 수행해야한다. 만약 두가지 이상의 역할을 수행한다면, 변수를 쪼개고 적절한 이름을 붙여준다. 참고 : 변수는 웬만하면 선언 후 바로 초기화 → 상수화하는 것이 좋다. 필드 이름 바꾸기 // before class Organization { get str() {} } // af..
-
[Refactoring] 8장 : 기능 이동책/Refactoring 2판 2024. 2. 14. 11:32
함수 옮기기 // before class SomeClass { get someFunc(); } // after class AnotherClass { get someFunc(); } 이는 클래스 이름을 바꾼게 아니라 함수가 옮겨진 것이다. 함수는 대부분 어떤 클래스에 속하게 된다. (자바의 경우 필수다) 만약 어떤 함수가 자신이 속한 모듈 A보다 모듈 B의 요소를 더 참조한다면 모듈 B로 옮겨주는 것이다. 필드 옮기기 // before class Customer { get plan() { return this.plan; } get discountRate() { return this.discountRate; } } // after class Customer { get plan() { return this.p..