Mass-Storage Structure 일반적으로 하드디스크 드라이브 또는 비휘발성 메모리를 의미한다. HDD 스케쥴링 HDD 스케쥴링의 목적 탐색 시간 최소화 한 번에 전송할 수 있는 데이터 양 최대화 FIFO 먼저 오는 것 먼저 처리하는 스케쥴링 방식 SCAN 한쪽 끝으로 갔다가 다른 쪽 끝으로 움직이면서 처리하는 스케쥴링 방식 C-SCAN(Circular-SCAN) 0으로 갈 때는 처리하지 않고 다시 출발할 때 처리하는 스케쥴링 방식 Boot Block 컴퓨터를 구동시키기 위해 필요한 정보들이 저장되어 있는 디스크 영역 RAID(Redundant Arrays of Independent Disks) 여기를 참고하자. RAID 레벨 I/O System Memory-mapped I/O I/O 주소 범위..
인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용 메모리 메모리는 주소를 가진 바이트로 구성된 큰 배열이다. 메모리 주소 공간을 각 프로세스가 따로 관리하기 위해서 메모리 공간을 구분할 필요가 있는데, 이 구분을 base register와 limit register를 통해 정한다. 메모리 공간 보호 (Protection for memory space) 주소 할당 (Address Binding) source program - symbolic address object file - relocatable address executable file - logical address(논리적 주소) program in memory - physicla a..
인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용 프로세스 간 통신(IPC) 여러 프로세스가 동시에 실행되면서 서로 협력해야 하는 경우가 생긴다. 이를 위해 데이터를 공유하거나 메시지를 주고받는 것을 프로세스 통신이라 한다. IPC의 방식 공유 메모리 (shared memory) 방식 메시지 전송 (message passing) 방식 Producer-Consumer 문제 생산자는 정보를 생성하고, 소비자는 정보를 소비하는 모델. 공유 메모리 방식으로 해결 두 개의 프로세스가 동시에 실행되면서 cpu를 번갈아가면서 선점할 때, buffer를 공유메모리로 만들어 통신하는 방식 생산자는 buffer를 채우고 소비자는 buffer를 비움. 만약 b..
인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용 프로세스의 개념 OS의 가장 기본적인 역할은 프로세스를 관리하는 것이다. Storage에 있는 프로그램을 Memory에 load 하면, 실행 중인 프로그램(program in execurtion)이 된다. 이것이 프로세스이다. Text section : 실행 가능한 코드를 저장하는 영역, 코드 영역이라고도 함. Data section : 전역 변수를 저장하는 영역 Heap section : 프로그래머가 필요에 따라 직접 메모리를 할당하는 영역 Stack section : 함수를 호출할 때 파라미터나 반환 주소, 지역 변수 등을 저장하는 영역 프로세스의 상태 및 생명 주기 New : 프로세스가..
CPU 스케쥴링 하나의 cpu를 여러 가지 프로세스가 메모리에 로드되어서, 프로세스가 cpu를 선점해서 concurrent 하게 실행하는 것을 멀티 프로세싱, 멀티프로그래밍, 멀티 태스킹이라고 한다. 이때 CPU의 효율성을 높이기 위해 CPU스케쥴링을 한다. cpu burst time, i/o burst time CPU burst time이 많은 것을 CPU bound라고 하고, I/O burst time이 많은 것을 I/O bound라고 한다. 선점형(preemptive)과 비선점형(non-preemptive) 선점형은 현재 작업 중인 프로세스를 쫓아내고 CPU를 점유하는 방식이다. 반면에 비선점형은 프로세스가 CPU를 선점하고 나면 자발적으로 나오기 전까지 내버려 두는 방식이다. Decision Ma..
MySQL의 구조 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분한다. MYSQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL 파서 및 전처리기, 그리고 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 성능 향상을 위해 캐시나 버퍼 풀과 같은 보조 저장소 기능도 포함돼 있다. 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어 오는 역할을 한다. 여러 가지 스토리지 엔진을 사용할 수 있다. CREATE TABLE test_table (col1 INT, col2 INT) ENGINE = INNODB 위와 같이 테이블을 생성하면 해당 테이블의 CRUD 작업은 InnoDB 스토리지 엔진이 처리한다. 핸들러 API..
조인이란 두 개 이상의 테이블을 하나의 집합으로 만드는 연산이다. SQL문에서 FROM 절에 두 개 이상의 테이블이 나열될 경우 조인이 수행된다. 조인 연산은 두 테이블 사이에서 수행된다. FROM 절에 A, B, C라는 세 개의 테이블이 존재하더라도 세 개의 테이블이 동시에 조인이 수행되는 것이 아니다. 세 개의 테이블 중에서 먼저 두 개의 테이블에 대해 조인이 수행된 후, 먼저 수행된 조인 결과와 나머지 테이블 사이에서 조인이 수행된다. 이러한 작업은 FROM 절에 나열된 모든 테이블을 조인할 때까지 반복한다. 테이블 또는 조인 결과를 이용하여 조인을 수행할 때 조인 단계별로 다른 조인 기법을 사용할 수 있다. 예를 들어, A와 B 테이블을 조인할 때는 NL Join 기법을 사용하고 해당 조인 결과와..
단순히 코드를 재사용할 목적으로 상속을 사용해서는 안된다. 재사용을 위해 상속을 사용할 경우 부모 클래스와 자식 클래스가 강하게 결합된다. 상속을 사용하는 일차적인 목표는 코드 재사용이 아니라 타입 계층을 구현하는 것이어야 한다. 코드 재사용은 상속이 아닌 합성을 사용하는 게 올바르다. 💡 객체지향 프로그래밍과 객체 기반 프로그래밍 객체 기반 프로그래밍이란 상태와 행동을 캡슐화한 객체를 조합해서 프로그램을 구성하는 방식을 가리킨다. 이 정의에 따르면 객체지향 프로그래밍 역시 객체 기반 프로그래밍의 한 종류다. 단 객체 기반 프로그래밍은 상속과 다형성을 지원하지 않는다. 타입 먼저, 프로그래밍 언어 관점에서의 타입과 개념 관점에서의 타입에 대해 알아보자. 개념 관점의 타입 개념 관점에서 타입은 우리가 인지..