SWjungle 18

Unix I/O

File 📌file 리눅스에서 file은 , 여러 바이트의 시퀀스이다. "모든 것이 파일이다" 모든 I/O device는 파일로 표현될 수 있다. /dev/sda2 -> /usr Disk Partition /dec/tty -> 터미널 디렉토리도 파일이다. 커널도 파일이다 /boot/vmlinuz-3.13.0-55-generic ~> 커널 이미지 /proc ~> OS 커널의 자료구조 당연히, 프로그램도 파일이다. /bin/ls : ls 프로그램 각 device와 데이터를 파일화 하는 이유는 커널이 이를 뽑아낼 수 있게 하기 위함이다. 즉, 모든 입출력 데이터를 파일화한다. 파일 관련 기본 unix i/o(system call) open() : 파일 열기 close() : 파일 닫기 read() : 파일 읽..

web server

HTTP 📌HTTP 웹에서 웹 클라이언트와 서버는 http라고 하는 텍스트 기반 응용 계층의 프로토콜중 하나로, TCP/IP 프로토콜을 이용한다. HTTP는 이미지, 텍스트 ,오디오 등 여러가지 유형의 데이터를 주고 받을 수 있다 .이런 웹 컨텐츠는 MINE 타입으로 인코딩됨 📌MINE타입 웹 서버에서 전송되는 여러 종류의 컨텐츠 유형을 전달하기 위해 필요한 매커니즘 📌MINE타입 역할 바이너리 파일의 송수신 ->웹은 텍스트 파일 뿐만 아니라 여러 바이너리 파일(오디오, 이미지, 비디오 등)을 전송하기도 한다.이런 바이너리 파일들을 문제 없이 전달하기 위해 파일을 mine타입 텍스트파일로 인코딩 한다. 데이터의 유형 명시 ->클라이언트와 서버는 주고 받는 데이터의 본체의 MINE타입을 통해 데이터가 어떤..

OSI(Open System Interconnection) 7 layers와 Internet protocol (TCP/IP)

📌1계층 / 물리 계층 / Phsyical Layer 물리적 연결(랜 케이블, 광케이블 등)을 위한 계층 데이터 전송 단위 : 비트스트림(bit stream) 비트 스트림 :데이터 통신 회로를 통하여 연속적으로 전송되는 일련의 비트열로 데이터 스트림의 단위 📌2계층 / 데이터링크 계층 / Data Link Layer 노드 간에 상호 통신에서의 오류제어, 흐름제어를 담당 데이터 링크 계층은 MAC(물리 계층연결)과 LCC(네트워크 계층연결)로 나누어짐 MAC : NIC(Network Interface Card)마다 하나씩 가지고 있는 48bits의 고유한 주소로, 물리적 주소라고도 한다. 대표 장비 : 스위치, 브릿지 데이터 전송 단위 : 프레임 📌3계층 / 네트워크 계층 / Network Layer 여러..

[malloc] budy메모리 할당

budy system 📌개념 큰 버퍼들을 반복적으로 2등분하여, 작은 버퍼들을 만들며, 가능할때마다 인접한 메모리를 합치는 과정을 반복하는 기법 📌버디 메모리 할당 특징 2의 멱승 : 메모리의 할당과 회수를 2의 멱승 단위로 수행 합병 : 서로 인접한 버디들이 손쉽게 큰 세그먼트로 병합 📌버디 시스템 원리 메모리를 1/2로 계속 나누어 요청한 메모리보다 큰 메모리를 할당한다. 예를들어 31를 요청했다면 256을 3번나누어 32룰 할당 31의 메모리를 회수할 경우 인접한 32와 합치고 다시 64kb, 128kb를 합쳐서 원래의 256kb로 만든다. 📌버디 메모리 할당 예제 💡1024k의 메모리에서 요청시 동작하는 과정 1) 프로그램 A가 64K 크기의 메모리를 요청 -> A 할당 2) 프로그램 B가 128..

SWjungle/#malloc 2023.09.14

[malloc] segregated free list 방식 - 구현

segregated free list seg-list 방법은 free 블록들을 사이즈 에 대해 리스트를 각각 마련하는 방식이다. 서로다른 size 값이 n개라면, n개의 가용 리스트를 두어 각 가용 블럭들을 분류해서 기억하는 것이다. 사이즈 별로 연결리스트를 만들어야 하기 때문에 여러개의 연결리스트가 필요하며 여러개의 연결리스트 포인터가 존재한다.(힙에저장) 예를들어 37만큼의 메모리를 할당하고자 하면 위 그림에서 32~64 사이즈 연결리스트를 선택하게 되고 연결리스트에서 적절한 free블록을 찾게 된다. 위와 같이 대부분의 seg-list에서 연결리스트 사이즈는 2의 제곱수를 기준으로 한다. 해당 연결리스트에서 적절한 사이즈의 블록을 찾지 못하면, 다음 크기의 연결리스트로 넘어서 찾게된다. 이렇게 연결..

SWjungle/#malloc 2023.09.13

[malloc] Explicit Free List 방식 - 구현

Explicit Free List implicit free list가 모든 블록(할당 + free)을 탐색하며 해당 블록이 할당되었는지, 아니면 free인지 확인하며 필요한 동작을 수행했다면, explicit free list는 오직 free 블록만 탐색하게 된다. 이러한 free 블록을 탐색할 수 있도록 이중 연결 리스트로 구성되는데, 이를 통해서 앞으로만 탐색하는 것이 아니라 뒤로도 탐색하는 것이 가능해진다. free 블록의 payload 부분은 사용하지 않는 상태로 되기 때문에 이 공간을 활용한다. 해당 블록에, 전의 free 블록의 주소로 갈 수 있는(주소값을 담고 있는) predecessor과 뒤의 free 블록의 주소로 갈 수 있는(주소값을 담고 있는) successor를 넣게 된다. 이를 통..

SWjungle/#malloc 2023.09.12

[Malloc] Implicit Free List방식-구현

Malloc - lab 📌heap 동적 메모리 할당기는 힙이라는 가상 메모리를 관리한다. 이러한 힙 영역에는 할당된 블록과 가용블록이 있다. 할당기의 종류 명시적 할당기(explicit allocator) : 메모리 할당과 해제를 직접적으로 관리하고 조작하는 할당기 단점 : 메모리 누수 , 무효 표인터(이전에 참조하던 메모리 위치를 가리키지만 이제는 무효화된 포인터를 나타냄) 암시적 할당기(implicit allocator) : 프로그래밍 언어 또는 런타임 라이브러리에 내장되어 있어서 개발자가 명시적으로 메모리 할당 및 해제를 관리하지 않아도 되는 메모리 할당 방식 단점 : 런타임 오버헤드 문제, 성능 문제 Malloc pacakge 📌malloc void *malloc(size_t size) 할당 성공..

SWjungle/#malloc 2023.09.11

메모리 정렬과 패딩

📌클래스의 멤버가 저장되는 영역 및 메모리 차지 우선 클래스는 멤버 변수와, 멤버 함수를 가질 수 있고, 정적 그리고 비정적 멤버 변수, 함수를 가질 수 있다. 클랙스 타입의 객체 또는 인스턴스 자체의 크기는 비정적 멤버 변수만 영향을 미친다. 즉, 멤버 변수로 int형 변수 1개를 가지면 이 클래스의 인스턴스 sizeof는 4바이트, 2개를 가지면 8바이트, 비정적 멤버 변수는 객체 생성과 동시에 생성된다. 객체 내의 지역변수와 동일하므로 스택에 저장된다. 또한 비정적 멤버 변수는 클래스 내에서 공유되는 변수가 아닌 하나의 객체마다 할당되는 변수이다. 만약 클래스 내에 정적 멤버 변수를 선언했다면 이 변수는 객체 생성 시 할당되는 것이 아니라 프로그램 시작시 데이터 영역에 생성된다. 따라서 정적 멤버 ..

[malloc] 동적 메모리 할당

📌동적 메모리 할당 컴퓨터 프로그래밍에서 실행 중에 사용할 메모리 공간을 할당하는 것을 의미 정적 할당 : 컴파일시점에 소스 코드를 읽고 메모리 공간을 확보하는 것 동적 할당 : 컴파일 시점이 아닌 프로그램이 실행되는 중인 런타임에 필요한 만큼의 메모리 공간을 확보하는 것을 의미한다. 💡동적할당을 하는 이유? char name [100]; name 배열은 최대 100개 까지 저장이 가능할 것이다. 그런데 막상 프로그램을 실행 시켜서 10글자만 입력했다. 그렇다면 90바이트는 어떻게 될? 그냥 낭비가 되는것이다. 반대로 100글자를 저장할 수 있는데 110글자를 입력하려고 한다. 이것 또한 문제이다. 위와 같은 문제를 해결해주는 것이 바로 동적 메모리 할당이다. 동적으로 할당한다는 말은, 프로그램이 시작된..

SWjungle/#malloc 2023.09.08

[컴퓨터 시스템 - 7장] 링커

링커 📌링킹 여러개의 코드와 데이터를 모아서 이를 연결하여, 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업이다. 💡링커의 링킹 과정 대부분의 컴파일 시스템은 사용자를 대신해 언어 전처리기, 컴파일러, 어셈블러, 링커를 필요에 따라 호출하게 만들어졌다. 이를 컴파일러 드라이버라고 한다. 예 ) gcc 드라이버 이렇게 만들어진 object file들을 링커가 링킹해서 실행파일로 만듭니다. 이 object파일은 재배치 가능한 목적 파일 📌정적연결 unix_ld와 같은 정적 링커들은 재배치 가능한 목적파일들과 명령줄 인자들을 입력으로 받아서 로드될 수 있고 실행될 수 있는 완전히 링크된 실행가능 목적파일을 출력으로 생성한다. 입력인 재배치가능 목적파일을은 다양한 코드와 데이터 섹션들로 이..