CS

    [Network] 하향식 접근 네트워크 - 2. Application Layer - (3) SMTP, POP3, IMAP

    이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다. Application Layer에서는 크게 3가지를 살펴본다. application principle client-server 구조 peer-to-peer (P2P) 구조 transport layer service model internet protocol - HTTP, electronic mail(SMTP, POP3, IMAP), DNS, P2P network application의 작성을 위한 interface - socket, UDP, TCP 이 글에서는 electronic mail을 위한..

    [Network] 하향식 접근 네트워크 - 2. Application Layer - (2) HTTP

    이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다. Application Layer에서는 크게 3가지를 살펴본다. application principle client-server 구조 peer-to-peer (P2P) 구조 transport layer service model internet protocol - HTTP, electronic mail(SMTP, POP3, IMAP), DNS, P2P network application의 작성을 위한 interface - socket, UDP, TCP 이 글에서는 internet protocol 중..

    [Network] 하향식 접근 네트워크 - 2. Application Layer - (1) Application Principle

    이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다. Application Layer에서는 크게 3가지를 살펴본다. application principle client-server 구조 peer-to-peer (P2P) 구조 transport layer service model internet protocol - HTTP, electronic mail(SMTP, POP3, IMAP), DNS, P2P network application의 작성을 위한 interface - socket, UDP, TCP 이 글에서는 application princip..

    [Network] 하향식 접근 네트워크 - 1. Introduction

    이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다. 이 글에서는 internet network와 protocol을 전체적으로 살펴보며 network, 특히 internet에서 사용하는 단어와 간단한 개념을 살펴본다. OSI 7계층 OSI는 위와 같이 7개의 layer로 나뉘는데, 이 강의에서는 application layer, presentation layer, network layer 3개를 중점적으로 살펴본다. Internet이란? Internet Component internet은 크게 3가지 component로 구성된다. host, lin..

    [Network] 1%의 네트워크 - 6. 마무리 : Web Server Response

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. 이전 포스팅에서 인터넷에서 나온 packet이 server의 load balancer나 방화벽, proxy를 거쳐 server에게 도달하는 것까지 살펴봤다. 이 장에서는 server가 어떤 과정을 거쳐 packet을 수신하는지 다뤄 볼 것이다. 대부분 내용은 앞에서 설명한 내용을 받는 내용이기 때문에 거의 유사할 것이다. Server request message에서 data 위치를 파악하고 그 값을 client에게 넘긴다는 것이 web server의 기본적인 동작이다. client와의 차이점 일단, server는 client가 보낸 요청을 처리하고 거기에 답을 한다. 그렇지만 LAN adapter, OS ..

    [Network] 1%의 네트워크 - 5. Firewall, Proxy, Load Balance

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. 이전 포스팅에서 인터넷 내부로 들어간 packet이 access 회선과 provider의 PoP/NOC를 거쳐 목적지로 도달했다. packet은 server 앞에 있는 방화벽/cache server/load balancer를 거친다. 이 장에서는 방화벽, cache server, load balancer를 설명한다. keywords : 방화벽, packet filtering, load balancer, proxy, cache server, redirect web server 설치 장소 server를 설치하는 위치는 크게 3가지이다. 사내 LAN에 server를 설치하고 인터넷에서 직접 access하는 경우..

    [Network] 1%의 네트워크 - 4. 인터넷 내부

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. 지난 포스팅에서는 LAN adapter에서 보낸 전기 신호가 어떻게 hub와 router를 거쳐 이동하는지 살펴봤다. 이 글에서는 access 회선과 인터넷 내부가 어떻게 동작하는지 살펴본다. 사실 CS를 공부하는 입장에서 이부분은 크게 중요한 것 같지는 않지만, 그래도 지식을 위해 정리한다. access 회선 access 회선이란 인터넷과 LAN을 연결하는 통신 회선이며, 종류가 매우 많다. 이 글에서는 ADSL, FTTH만 살펴본다. ADSL을 사용한 access 회선 (Asymmetric Digital Subscriber Line) ADSL을 사용한 access 회선은 위 그림과 같은 순서로 인터넷에..

    [Network] 1%의 네트워크 - 3. Cable, Hub, Router

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. 지난 포스팅에는 OS의 protocol stack과 LAN adapter의 역할인, packet을 전기 신호로 변환하고 송출하는 부분을 살펴봤고 ethernet에서 packet이 어떻게 움직이는지 아주 간단하게 살펴봤다. 이 글에서는 packet이 hub와 router를 거쳐 어떻게 인터넷으로 움직이는지 살펴본다. LAN adapter가 발송한 전기 신호는 hub와 router가 중계해서 목적지로 이동한다. 이 때 hub와 router는 packet header와 내부에 있는 table을 참고해 움직인다. 이 때 hub와 router는 data 부분은 보지 않는기 때문에 TCP header나 HTTP he..

    [Network] 1%의 네트워크 - 2. OS Protocol Stack과 LAN Adapter

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. application은 OS의 protocol stack에 request message를 보내달라고 한다. server와 client는 다음 과정을 통해 연결된다. 1. server가 socket을 만들고 대기한다. 2. client가 socket을 만든다. 3. client가 server의 socket에 연결한다. 4. client와 server가 socket을 통해 데이터를 주고받는다. 5. socket 연결을 끊는다. 이전 포스팅에서 웹 브라우저가 request message를 작성하고 OS에게 송신을 맡긴다고 했다. 이 글에서는 OS의 protocol stack과 LAN driver가 어떻게 mes..

    [Network] 1%의 네트워크 - 1. 웹 브라우저가 하는 일

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. 이 글에서는 client가 웹 브라우저에 URL을 입력했을 때 제일 처음으로 무슨 일이 벌어지는지 설명한다. 크게 다음 단계로 나뉜다. 웹 브라우저가 HTTP request message를 작성한다. 이후 OS에게 DNS server를 통해 name resolution을 맡긴다. 이후 OS protocol stack에게 request message를 보내달라고 한다. keywords : browser, web server, URL, URI, HTTP, protocol, resolver, socket, DNS server, name resolution HTTP Request Message 작성 사용자가 웹 ..

    [Network] 1%의 네트워크 - 0. 서론

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리 책(이도희 역)을 기반으로 재구성한 것입니다. 이 책은 사용자가 웹 브라우저에 URL을 입력해 웹 서버에 도착할 때까지 어떤 일이 일어나는지 개괄적으로 소개한다. 모든 것을 한 번에 보았을 때 위 그림에 있는 요소들을 거친다. [사용자의 웹 브라우저 - TCP/IP - LAN 드라이버 - hub - router] | [전화국 - 통신사 - 인터넷 - 통신사 - 전화국] | [방화벽, 캐시 서버] | [웹 서버의 LAN 드라이버 - TCP/IP - 웹 서버 소프트웨어] 잘못된 내용이나 오탈자에 대한 지적, 질문 등은 언제나 환영합니다.

    [OS] Storage Device

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 storage device에 대해 다룬다. Storage - RAM & Disk 포스팅에서와 유사한 부분이 많기에 비슷한 부분은 생략하거나 간단하게 적을 것이다. 요새 사용하는 storage는 크게 아래 2가지로 나뉜다. Hard Disk Drive (magnetic disk) reliable하다. 가격이 싸다. block level random access이다. sequential access의 성능이 좋다. Flash Memory (SSD) reliable하다. 가격이 비싸다. block level random access이다. read의 성능은 좋지만 random write의 성능이 나쁘다. D..

    [OS] File System 구현

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 File System & Directory 포스팅에서 다룬 file system의 구현에서 고려할 점을 살핀다. File System 구현 file system의 구현을 알아보기 전에 몇 가지 먼저 살펴보자. inode in UNIX file header를 담는 data structure를 inode라고 하며, UNIX에서 사용한다. 모든 file은 각각의 inode를 가지며 inode는 이름 빼고 file의 모든 정보를 담고 있다. inode는 fixed size array로 관리하는데, 이 때 index를 inode number(i-number)라고 한다. 한편, directory는 filenam..

    [OS] File System & Directory

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 file, file system, directory에 대해 살펴본다. 이전에 작성한 System Level I/O 포스팅에서도 비슷한 내용을 다루었으니 필요 시 참고하면 될 것 같다. File file은 nonvolatile storage device에 저장된 data의 집합이다. OS는 이 정보를 더 쉽게 다루기 위해 file을 연속된 byte의 나열로 보기도 한다. file의 정보는 크게 metadata와 file data 2가지로 나뉜다. metadata : data에 대한 data. 정보의 요약본. 이름, 식별자, type, location, size, protection, time, date..

    [OS] Demand Paging & Thrashing

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 한정된 physical memory를 무한하게 볼 수 있게 만들어 주는 demand paged virtual memory, memory mapped file, replacement policy, thrashing 등을 살펴본다. cache의 개념과 구조는 Cache와 Locality 포스팅에 작성했으므로 필요 시 참고하면 될 것 같다. Cache 복습 cache는 속도가 크고 느린 하위의 저장소에 대한 사본을 만들어 사용해 더 빨리 접근할 수 있게 만드는 방법이다. 만약 cache에 해당 데이터가 있다면 hit, 없다면 miss이다. cache는 사본인 만큼 cache에 값을 쓰더라도 원본에는 저장되..

    [OS] Address Translation

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 OS가 실행하는 address translation을 설명한다. 예전에 작성했던 virtual memory 포스팅에서 작성했던 내용과 겹치는 부분이 상당히 많다. Memory Abstraction Process를 메모리에 올릴 때 memory에 단 하나의 process만 올라간다면 앞서 봤던 복잡한 과정이 필요 없다. 그렇지만 다른 process가 실행되면 memory의 모든 정보를 디스크로 뺐다가 넣는 과정을 거쳐야 하기에 성능이 매우 나쁠 것이다. 반면 위 그림처럼 여러 process를 physical memory에 올린다고 생각해 봤을 때, 여러 process가 동시에 실행할 수 있지만 (mul..

    [OS] Process Scheduling

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글은 process scheduler를 설명한다. CPU Scheduler CPU scheduler는 ready queue에 있는 process 중 하나를 선택해 CPU에 할당한다. 이 때 강제로 다른 process의 가져올 수 있는지 또는 해당 process가 끝난 이후에 scheduling을 진행하는지에 따라 크게 2종류로 나뉜다. preemptive : 필요 시 process로부터 CPU를 강제로 회수하는 방법. non preemptive : process의 동작이 종료되거나 process가 자발적으로 중지할 때까지 해당 process의 실행을 보장하는 방법. 용어 task : 사용자의 request l..

    [OS] Multiprocessor Synchronization & Deadlock

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 지난 포스팅에서 lock 등을 사용해 synchronization을 사용하는 방법을 알아보았다. 그러나 이 방법은 lock을 사용하기 때문에 multi processor에서는 효율이 나쁘다. 이 글에서는 어떻게 이를 해결하는지, 그리고 resource의 요청이 꼬였을 때 발생하는 deadlock에 대해 알아본다. Multiprocessor Synchronization multi processor 환경에서 많은 thread를 가진 프로그램은 효율이 좋지 않다. lock contention : 한 번에 단 하나의 thread만 lock을 가질 수 있기 때문이다. cache ping : lock에 의해 보호받는 sha..

    [OS] Implementing Synchronization

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이전 포스팅에서 Lock, Condition Variable, Semaphore를 살펴봤었다. 이 글에서는 어떻게 이들을 구현하는시 살펴본다. Sychronization 구현 synchronization을 구현하는 방법에는 크게 3가지가 있다. atomic한 memory load/store instruction. (note와 while문을 사용하는 peterson 알고리즘) 그러나 이 방법은 너무 복잡하고 thread 개수가 많아지면 구현하기 어렵기에 좋은 방법이 아니다. 특정 코드에 대해 interrupt를 차단하는 방법. 이 방법은 간단하지만 interrupt가 발생했을 때 해당 코드를 모두 실행한 후 int..

    [OS] Synchronization - Lock, Condition Variable, Semaphore

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 synchronization의 개념에 대해 살펴본다. 딱 하나의 thread만 있는 경우 모든 instruction이 deterministric하기 때문에 아무런 문제가 없다. 그러나 multi thread 환경으로 concurrent 환경을 만들었을 경우, shared data에 대한 concurrent access가 race condition을 발생시키고, data inconsistency가 발생할 수 있다. 이 장에서는 이러한 현상을 어떻게 막을 수 있는지를 살핀다. Atomic Operation Race Condition race condition은 shared data에 동시에 접근할 때, ..

    [OS] Concurrency & Thread

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글은 OS의 concurrency와 thread를 다룬다. 한 프로그램은 여러 개의 이벤트를 동시에 처리해야 할 수 있어야 한다. 앞에서 살펴본 내용으로는 process가 concurrency를 지원하기 때문에 여러 개의 process를 사용하면 concurrency를 처리할 수 있을 것이다. 그러나 process의 생성 cost가 클 뿐아니라 process끼리는 독립된 자원을 사용하기 때문에 상호작용도 어렵다. 이를 해결하기 위해 나온 것이 thread이다. Thread 위에서 문제삼은 내용을 해결하기 위해 process를 thread와 address space 2개로 나눈다. thread : process..

    [OS] Process

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글은 process에 대해 살펴본다. Process process는 program의 instance이다. Program program은 disk에 있는 instruction들의 집합이다. 소스코드 .c 파일은 컴파일을 거쳐 .s 파일이 되고, 어셈블러를 거쳐 .o 파일이 되고, linker가 이들을 모아 executable file인 .out 파일이 된다. 이 .out 파일이 program이다. Instance program을 실행하면 해당 파일 내에 있는 instruction과 data를 메모리에 올리며, 이렇게 메모리에 올라가 실행 중인 프로그램이 하나의 instance, 즉 process이다. 메모리에 ..

    [OS] Operating System Overview

    이 글은 포스텍 박찬익 교수님의 운영체제(CSED312) 강의를 기반으로 재구성한 것입니다. 이 글에서는 Operating System의 대략적인 그림을 살펴본다. OS를 위한 하드웨어 기술 Bootstrapping bootstrap은 OS의 실행 준비를 뜻하며 아래 4가지 과정을 거친다. power on : physical memory의 defined address로 jump (ROM의 bootstrap code - BIOS -로 간다.) disk 내의 bootloader를 physical memory로 복사한다. disk 내의 kernel을 bootloader가 physical memory로 복사한다. 이후에는 OS가 각 app을 찾아 memory에 load한다. 이 과정은 disk에서 app을 찾고..

    [컴퓨터 SW] Dynamic Memory Allocation

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글에서는 dynamic memory allocation에 대해 알아본다. (java의 object나 C의 malloc, C++의 new 등 heap에 data 할당하는 것들) Dynamic Memory Allocation C의 mmap과 같이 직접 메모리를 할당할 수 있지만 이 경우 메모리의 할당 주소를 직접 지정해 주고 잊지않고 할당한 메모리를 해제하는 등의 작업이 필요하다. 이를 해결한 것이 dynamic memory allocation이다. dynamic memory allocatior는 heap에 필요한 만큼 메모리를 자동으로 할당해 준다. 또한 모든 프로그램의 data structure는 r..

    [컴퓨터 SW] Virtual Memory

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글에서는 virtual memory에 대해 알아본다. disk size는 memory size보다 훨씬 크고 memory size는 꽤 작기 때문에 실제로 한 번에 실행할 수 있는 process의 개수가 한정된다. 그러나 virtual memory를 통해 하나의 process에 격리된 하나의 private linear address space를 제공할 수 있게 된다. 이외에도 locality에 의해 memory를 효율적으로 사용할 수 있게 되고, memory 관리를 단순화하며, address space를 격리할 수 있는 장점이 있다. Virtual Memory Virtual Memory Concept..

    [컴퓨터 SW] System Level I/O

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글은 Linux에서 system level I/O를 살펴본다. Unix I/O Linux에서 file은 m개 byte의 나열, B$_0$, B$_1$, B$_2$, ... , B$_{m-1}$이며, 모든 I/O device는 file로 간주하며 current file position을 조정해 해당 위치에 있는 byte를 읽는다. File Type file type은 아래 3가지가 있다. Regular File : 임의의 데이터를 포함하는 file Directory : 관련있는 파일 그룹의 index. link들의 배열로 이루어져 있으며 각 link는 file과 filename을 매핑한다. Socket..

    [컴퓨터 SW] Exceptional Control Flow & Process

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글에서는 exceptional control flow에 대해 알아본다. Exceptional Control Flow processor가 시작된 순간부터 끝나는 순간까지 CPU는 연속된 instruction으로부터 한 번에 하나의 instruction을 읽고 실행한다. 이러한 순서를 CPU의 control flow라고 부른다. control flow가 바뀌는 경우는 크게 3가지가 있는데, 그 중 2가지는 앞에서 배운 call과 return / jump와 branch이고 나머지 하나가 exceptional control flow이다. call and return 또는 jump and branch의 경우 ..

    [컴퓨터 SW] Static Linking

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글에서는 Linking에 대해 알아본다. Linking Linking은 프로그램 코드와 데이터를 합쳐 실행할 수 있는 파일을 만드는 과정이고, Linker는 Linking을 수행하는 프로그램이다. Linking의 장점 Linking의 개념이 등장하기 이전에는 모든 소스코드를 한 번에 컴파일해 실행가능한 프로그램을 만들었는데, 이 방식의 경우 소스코드가 조금만 바뀌어도 프로그램 전체를 재컴파일해야하는 비효율적인 방식이다. 그러나 Linker의 등장으로 프로그램을 작은 소스파일의 단위로 모듈화했고, 소스코드가 수정된 부분의 모듈만 재컴파일해 기존 모듈들과 Linking을 할 수 있게 되었다. 즉슨 기존에..

    [컴퓨터 SW] Cache와 Locality

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글은 cache에 대해 다룬다. Locality locality는 프로그램이 최근에 참조한 주소와 그 근처의 주소에 반복적으로 참조하는 경향이다. temporal locality와 spatial locality 2종류가 있다. temporal locality : 최근에 참조된 주소를 반복적으로 참조하는 것을 의미한다. spatial locality : 최근에 참조한 주소 근처의 주소를 참조하는 것을 의미한다. int sum = 0; for(int i = 0; i 4라 가정하자. 제일 첫 접근 : ijk for(int i =0; i

    [컴퓨터 SW] Storage - RAM & Disk

    이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다. 이 글에서는 Storage저장매체 중 RAM과 disk에 대해 간단히 살핀다. Random-Access Memory, RAM RAM은 자유롭게 내용을 읽고 쓸 수 있는 저장장치이다. 최소단위는 cell이며 하나의 cell에 하나의 bit가 저장된다. 이 cell들이 모여 chip을 이루고, chip들이 모여 memory가 된다. 크게 SRAM과 DRAM으로 나뉜다. 특징으로는 전원이 꺼지면 정보를 잃어버리는 volatile휘발성 메모리이다. Static RAM 각 cell이 4개 또는 6개의 트랜지스터를 가지고 있으며 내부 루프를 통해 값을 계속 유지시키기 때문에 전원이 유지되는 한 값이 유지되며, ce..