CS 공부

    OS 정리 5 - 메모리 관리 (Memory Management) [1]

    1. Background 프로그램은 (디스크에서) 메모리로 가져 와서 프로세스 내에서 실행되도록 해야 함 주 메모리 및 레지스터는 CPU가 직접 액세스 할 수 있음 레지스터는 하나의 CPU 클록 (또는 그 이하)으로 액세스 주 메모리는 많은 사이클을 수행할 수 있음 캐시는 주 메모리와 CPU 레지스터 사이에 위치 올바른 작동을 보장하기 위해 필요한 메모리 보호 2. Binding of Instructions and Data to Memory 프로그램은 기본적으로 이진 실행파일 형태로 디스크에 저장되며, 이를 실행하기 위해서는 프로그램을 메모리로 가져오는 것이 필요하다. 이때, 주소 바인딩은 크게 세가지 단계로 이루어진다. 1. 컴파일 시간 바인딩 - 만일 프로세스가 메모리 내에 들어갈 위치를 컴파일 시간..

    Chapter 3 - Transport Layer(2)

    3.5 Connection-oriented transport : TCP TCP Overview point-to-point : 송신자, 수신자가 서로 1대 1로 데이터를 주고받는다. 신뢰적이며, 데이터가 큰 파일을 byte stream으로 나누어 보낸다. 파이프라인화 되어있다. 양방향 연결 서비스를 제공한다. 혼잡 제어, 흐름 제어 기능을 가지고 있다. 3-way 핸드 셰이크를 사용해 연결 지향적이다. TCP Overview : segment structure src, dst 포트 번호와 데이터 길이, 체크섬, 데이터만 가지고 있는 UDP 헤더와 다르게 위 그림에서 보다시피 상당히 많은 것들이 TCP 헤더에 담겨 있다. 연결 지향으로 sequence num, ack num들이 무려 32비트를 차지한다. h..

    Chapter 3 - Transport Layer(1)

    3.1 transport layer services transport services and protocols 트랜스포트 레이어가 하는 일 서로 다른 호스트에서 돌아가는 어플리케이션 프로세스 간 logical communication을 제공한다. 프로토콜은 엔드 시스템에서 돌아간다 -> 코어에 있는 라우터들은 트랜스포트 레이어를 구현하고 있지 않음.(라우터들을 거쳐 데이터들이 전달되지만 트랜스포트 레이어의 입장에서는 거쳐가는 과정은 보이지 않고 두 엔드 시스템 사이의 logicla한 커뮤니케이션만 보게 됨)(라우터에서는 실제로 네트워크, 데이터 링크, 피지컬 레이어만 존재) -> sender가 하는 일 : segment 단위로 메세지를 잘라서 트랜스포트 레이어의 헤더를 붙이고 네트워크 레이어로 보내줌 -..

    DB 정리 4 - Redis, Statement

    Redis 레디스 (Remote Dictionary Server)는 메모리 기반의 key-value 구조(딕셔너리)의 데이터 관리 시스템이다. 모든 데이터를 메모리에 저장하고 조회하기때문에 빠른 Read, Write 속도를 보장하는 NoSql이다. 속도가 빠른 이유 ? 메모리 접근이 디스크 접근 방식보다 빠르기 때문. Cache : 나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 것. → 어디에 저장할까? CPU cache - 캐시를 저장하기에는 너무 비쌈. Main memory (DRAM) - 적당히 비싸고 괜찮음. 휘발성의 특징을 가지고 있음. 하드디스크, SSD - 저렴하고 크며, 껐다 켜도 날아가지 않음. 보통 데이터베이스는 하드 디스크나 SSD에 저장한다. (비교적 느리지만, 저렴하고..

    Chapter2 - Application Layer(2)

    2.3 electronic mail 세 가지 주요 구성 user agents (= mail reader) Mail servers(메일을 가지고 있는 서버, SMTP로 메시지 주고받음.) SMTP -> 메일 서버들이 메일을 보낼 때 사용하는 프로토콜 -> 클라이언트 : 메세지 보냄 / 서버 : 메세지 받음 2.3.1 SMTP 신뢰적 데이터 전송을 위해 TCP를 사용한다. Direct transfer : sending 서버가 receiving 서버로 직접 전달한다. 세 단계의 전달 과정을 거친다. -> handshaking : tcp connection open -> transfer to messages : 메세지 전송 -> closure : connection 해제 클라이언트가 command를 보내면 서버..

    Chapter2 - Application Layer(1)

    2.1 principles of network applications application layer : 레이어 중 가장 위의 레이어 network application : 네트워크를 이용한 프로그램들 -> 이메일, 웹, 메세지 등 -> 두 가지의 application architecture가 있다. -> client-server, peer-ro-peer client-server architecture 대부분의 앱들이 이 구조를 따르며, client 와 server가 존재하여 둘 사이에 데이터가 이동한다. 보통 client가 데이터를 요청하여 받고, server가 데이터 요청을 받아서 보내준다. server : 항상 켜져있는 호스트 영구적인 ip 주소(고정적 ip주소) : 클라이언트가 접속하기 위해 데이..

    OS 정리 4 - CPU 스케줄링 (CPU Scheduling)

    0. CPU 스케줄링 CPU 스케줄러는 다중 프로그램 운영체제의 기본이다. 운영체제는 CPU를 프로세스 간에 교환함으로써, 컴퓨터를 보다 생산적으로 만든다. 최신 운영체제에서는 실질적으로 프로세스가 아니라 커널 수준 스레드를 스케줄 한다. CPU, Core, Processor, Thread 용어 설명 더보기 Processor 참조 링크 프로세서란 컴퓨터와 전자기기들에 내장된 작은 칩을 말한다. 프로세서의 기본적인 역할은 입력을 받아서 적절한 출력을 제공하는 것이다. 이러한 작업들은 간단한 작업처럼 보일 수 있지만 최신 프로세서는 초당 수 조 개의 계산을 처리할 수 있다. 프로세서의 한 종류로써 마우스 및 키보드 입력 처리, 응용 프로그램 실행과 같은 모든 기본 시스템 명령을 처리하는 컴퓨터의 중앙 프로세..

    DB 정리 - 2 (정규화, 트렌젝션, 트렌젝션 격리수준)

    정규화 1. 정규화의 생성 배경 한 릴레이션에 여러 엔티티의 애트리뷰트들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 또 중복된 정보로 인해 갱신 이상이 발생하게 된다. 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 되는 것이다. 이러한 문제를 해결하기 위해 정규화 과정을 거치는 것이다. 갱신 이상에는 어떠한 것들이 있는가? 삽입 이상(insertion anomalies) 원하지 않는 자료가 삽입된다든지, 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점을 말한다. 삭제 이상(deletion anomalies) 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실..

    OS 정리 3- 프로세스 & 쓰레드 (Process and Thread)

    1. Process 정의 프로세스 : 수행중인 프로그램 텍스트, program counter와 register의 값, stack, data section, heap section을 포함한다. * 프로그램은 어떤 작업을 하기 위한 명령어 목록과 데이터를 묶어 놓은 파일이며, 보조 기억장치에 저장되어 있다. 간단하게 비유하면 프로그램은 레시피, 프로세스는 요리라고 보면 편하다. 프로세스의 상태 생성 상태(new) : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태. 준비 상태(ready) : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태 실행 상태(running) : 선택된 프로세스가 CPU를 사용하는 상태(실행되는 상태) 대기 상태(waiting) : 실행 상태에 있는 프로세스가 입출력을 ..

    해시(Hash) 란?

    1. 개념 해시 임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장하는 것 키에 대한 해시값을 사용하여 값을 저장하고 키-값 쌍의 갯수에 따라 동적으로 크기가 증가하는 associate array 이다 키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 한다. 해시값 자체를 index로 사용하기 때문에 평군 시간복잡도가 O(1) 로 매우 빠르다 → 해시 태이블의 크기에 상관없이 데이터에 빠르게 접근할 수 있다. → 모든 데이터를 살피지 않아도 검색과 삽입/삭제를 빠르게 실행할 수 있다. 해시함수 위에 설명한 것과 같이 키에 대한 해시값을 만드는 함수(알고리즘) 계산이 복잡하지 않고 키값에 대해 중복없이 해시값을 고르게 만들어 내는 함수가 좋은 함수 (충돌이 일..