전체 글 25

[WIL] Copy On Write

Copy On Write 📌copy on write 개념 Copy-on-Write은 메모리 관리 기술 중 하나로, 데이터를 공유 하면서 수정이 발생하면 복사본을 생성해 데이터의 일관성을 유지하면서 리소스를 절약하는 기법 📌copy on write가 적용되지 않았을때 그림과 같이 포크를 할 때마다 부모 프로세스가 사용중인 프레임의 수 만큼 카피 프레임을 생성하여 사용한다면 완전히 같은 데이터를 가지고 있는 데이터 프레임이 중복되어 사용될텐데 이는 메모리 공간을 낭비로 볼 수 있다. 📌copy on write가 적용 후 copy on write은 이렇게 메모리 공간 내 동일한 데이터를 가진 프레임이 중복되어 존재하는 것을 줄이는 기법으로 포크를 할 때 일단 부모와 자식이 프레임을 공유하여 카피 프레임의 생성..

pintos 2023.10.24

[WIL]Project3: Virtual Memory

Project3: Virtual Memory 당신의 OS는 여러 개의 쓰레드를 알맞게 동기화해서 적절히 핸들링할 수 있고, 여러개의 유저 프로그램을 한번에 로드할 수 있다. 그러나, 돌릴 수 있는 프로그램의 개수와 사이즈는 머신의 메인 메모리 크기에 맞춰 제한되어있다. 이번 과제를 통해 무한의 메모리의 환상을 만들어서 그 제한을 제거해보자. 1. Background 배경 1-1) Source Files 소스파일 이번 프로젝트에서는 vm 디렉토리에서 작업하게 될 것이다. Makefile은 DVM을 setting하도록 되어있다.⇒ Makefile에서 VM에 대해 define 해준다는 말이다. 코드 중간에 ifdef VM으로 감싼 부분이 활성화된다. 엄청난 양의 템플릿 코드를 제공합니다. 반드시 주어진 템플릿..

pintos 2023.10.11

[PintOS] Project 2 - User Programs

System Call 시스템 콜은 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스 사용자 모드 프로그램이 커널 기능을 사용할 수 있게함 시스템 콜의 핵심은 시스템 콜 호출 시, 하드웨어 인터럽트가 발생하여 실행모드의 우선순위가 특수모드로 상향 조정되는 것임 System call 호출 과정 핀토스의 시스템 콜은 intr_handler 함수를 통해 호출이 된다. 시스템 콜은 인터럽트의 한 종류이다. System Call Handler 유저 프로그램이 exec를 호출하면 바로 커널의 systemcall이 발동되는게 아니라 lib/user/syscall.c에 있는 exec()가 호출되고, 이 함수는 define 되어 있는 syscall1을 부른다. 그 syscall1은 위에서 #define syscall..

카테고리 없음 2023.10.11

[WIL] PROJECT1 - Alarm Clock

Alarm Clock 🙈 devices/timer.c 에 있는 timer_sleep()을 다시 구현해봅시다. 📌현재 핀토스에 구현되어있는 timer_sleep() 현재 프로세스는 알람을 울려줘야 하는 시간이 됐는지 여부를 확인하기 위해, ready 상태와 running 상태태를 왔다갔다 하게 된다. 그 결과, 두 상태 사에에서 왔다갔다 하면서 소모적인 cpu cycle을 반복하게 된다. 쓰레드가 running 상태일 때, alarm을 호출하면, 준비리스트의 가장 맨 마지막으로 다시 들어가고, 결국 다시 실행된다. 따라서, 현재 구현된 방식으로 준비 리스트를 기반으로 한 루프를 계속 돌게 되는 것이다. ready_list -> running -> yield -> ready_list 💡구현 아이디어 👉🏻bl..

pintos 2023.10.03

[PROJECT 1 : THREADS]과제 설명

PROJECT 1 : THREADS introduction 소개 👉🏻이 과제에서 최소한의 기능을 갖춘 스레드 시스템이 주어진다. 우리의 임무는 이 시스템의 기능을 확장하여 동기화 문제에 대한 더 나은 이해를 얻는것, 이 과제에서 주로 스레드 디렉토리에서 작업하게 될텐데, 옆에 devices 디렉토리에서도 작업을 해야한다. 컴파일은 주로 스레드 디렉토리에서 해야한다. 이 프로젝트에 대한 설명을 읽기 전에 동기화에 관한 자료를 최소한 훑어보는 것이 좋다. Background ✏️Understanding Threads 쓰레드 이해하기 🤔 먼저 과제에서 제공되는 쓰레드 시스템 코드를 읽고 이해합시다. Pintos에는 이미 쓰레드 생성, 쓰레드 종료, 쓰레드 간에 스위치를 하는 간단한 스케쥴러, 그리고 동기화 함..

pintos 2023.09.21

[level2] Cache

✏️문제 설명 ✏️문제풀이 페이지(캐시) 교체 알고리즘 (LRU) 사용자에게 빠르게 정보를 제공하기 위해 사용하는 캐시에서 새로운 데이터가 발생했을 때, 가장 오래전에 사용된 데이터를 제거하고 새로운 데이터를 삽입하는 알고리즘 1. 새로운 데이터가 들어온 경우 ① 캐시에 넣어준다. ② 캐시가 가득 차있다면, 가장 오래된 데이터를 제거하고 넣어준다. 2. 캐시에 존재하는 데이터가 들어온 경우 ① 해당 데이터를 꺼낸 뒤, ② 가장 최근 데이터 위치로 보내준다. 💡CODE def solution(cacheSize, cities): cache = [] time = 0 for city in cities: city = city.lower() if cacheSize: if not city in cache: if le..

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