[OS] 가상 메모리 #1 (Virtual Memory)
◎ CS/운영체제2024. 5. 17. 14:01[OS] 가상 메모리 #1 (Virtual Memory)

https://reo91004.vercel.app/os-2 [OS] 가상 메모리 (Virtual Memory)가상 메모리의 모든 것reo91004.vercel.app더 잘 정리되어 있습니다. 🖥️ 시작하며이전 포스팅에서 가상 메모리를 왜 쓰는지에 대해 알아봤으므로, 이번 포스팅에서는 가상 메모리를 구현하는 방법에는 무엇이 있는지 알아보려고 한다.🔍 Paging결국 가상 메모리를 쓰는 이유는, 물리 메모리를 효율적으로 쓰는 동시에 크고 연속적인 주소 공간을 보고 싶어서다. 페이징은 이런 프로그래머의 요구를 충족시켜 준다.📌 Features물리적 주소 공간이 비연속적일 수 있도록 허용한다.물리적 메모리를 Frame 이라는 고정된 크기의 블록으로 나눈다.논리적(가상) 메모리를 Page 라는 동일한 크기의..

[Leetcode] 1. Two Sum
◎ 자료구조와 알고리즘/Leetcode2024. 5. 8. 15:24[Leetcode] 1. Two Sum

문제 링크 : https://leetcode.com/problems/two-sum/description/🖥️ 시작하며브루트 포스 방법으로 접근할 수 있다.이중 for문 으로 순차적으로 모든 배열을 탐색하며 결괏값을 찾으면 된다. 조건에 You may assume that each input would have ***exactly* one solution**, 라고 명시했으므로 쉬운 문제라 할 수 있다.⚙️ Pythonclass Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i + 1, len(nums)): ..

[Leetcode] 2816. Double a Number Represented as a Linked List
◎ 자료구조와 알고리즘/Leetcode2024. 5. 8. 02:17[Leetcode] 2816. Double a Number Represented as a Linked List

[Leetcode] 2816.문제 링크 : https://leetcode.com/problems/double-a-number-represented-as-a-linked-list/?envType=daily-question&envId=2024-05-07🖥️ 시작하며간단한 연결 리스트 문제다.받은 연결리스트에서 숫자를 문자열로 하나하나 저장문자열을 숫자로 바꾼 후, 2배결과물을 다시 연결 리스트로 저장class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def doubleIt(self, head: Optional[ListNode]) -> Optio..

[Leetcode] 42. Trapping Rain Water
◎ 자료구조와 알고리즘/Leetcode2024. 5. 8. 00:43[Leetcode] 42. Trapping Rain Water

문제 링크 : https://leetcode.com/problems/trapping-rain-water/description/🖥️ 시작하며처음 접근이 어려웠던 문제였다.우선 height 배열에 검은색 블럭의 높이가 주어지고, 비가 왔을 시 웅덩이가 생기는 칸이 몇 칸인지 답을 도출해야 하는 문제다.아마 직관적으로는 왼쪽 벽과 오른쪽 벽 중 낮은 벽의 높이로 바로 접근할 수 있지 않나 싶다.그래서 본인은 왼쪽 벽의 최대 높이를 저장하는 배열, 오른쪽 벽의 최대 높이를 저장하는 배열을 생성하는 쪽으로 가닥을 잡았다.아래 그림을 중심으로 파헤쳐보자.결국 이를 식으로 풀어내자면**왼쪽과 오른쪽 벽의 최솟값 - 검은색 블록 높이** 라고 할 수 있다.Pythonclass Solution: def trap(..

[OS] 메모리 관리 (Memory Management)
◎ 자료구조와 알고리즘/자료구조 이론2024. 5. 1. 00:54[OS] 메모리 관리 (Memory Management)

🖥️ 목표프로그래밍을 위한 편리한 추상화 제공부족한 메모리 자원을 경쟁 프로세스간 할당 → 최소한의 오버헤드프로세스 간 고립된 환경 제공🔍 Single/Batch Programming간단하게, 하나의 프로세스를 위한 것이므로 메모리를 다 쓰면 된다.🔍 Multiprogramming한 번에 여러 프로세스를 돌려야 함여러 작업의 I/O 및 CPU가 오버랩각 프로세스는 연속적인 공간과 요구하는 메모리 사이즈가 다름요구사항보호 : 각 프로세스가 사용하는 주소 공간을 제한해야 함빠른 변환 : 가상 메모리에서 물리 메모리로의 변환이 빨라야 함빠른 context switch : (보호 및 변환을 위해) 메모리 하드웨어 업데이트가 빨라야 함💡 1. Fixed Partitions📌 물리 메모리를 일정한 크기의 ..

[CS] 캐시 메모리의 총정리 (Direct Mapping Cache를 중점으로)
◎ CS/컴퓨터구조2024. 4. 15. 15:22[CS] 캐시 메모리의 총정리 (Direct Mapping Cache를 중점으로)

🖥️ 들어가며 자꾸 헷갈렸던 캐시 메모리의 총정리를 해보려고 한다. 왜 이리 헷갈리는지 드디어 가닥을 잡은 것 같아 포스팅으로 이 기억을 남기려고 한다. 🔍 캐시(Cache)란? 프로세스는 트랜지스터의 등장 이후 굉장히 빠른 속도로 발전한 반면, 메모리의 발전 속도는 프로세서에 비해 굉장히 더디게 발전했다. 이런 속도 간격을 메꾸기 위해 캐시(Cache) 가 나오게 되었다. 캐시는 CPU 안에 들어가는 매우 빠른 메모리다. 자주 사용하는 데이터들은 미리 캐시에 넣어둔 후, 프로세서가 메인 메모리 대신 캐시에서 데이터를 가져오도록 해 처리 속도를 높이는 것이 목적이다. 💡 메모리 구조 그림에서 보는 바와 같이, 속도는 위로 올라갈수록 빨라지고 용량은 위로 올라갈수록 적어진다. 그리고 가장 중요하게 알아 둬..

[자료구조] 큐 (Queue) - 배열로 구현 (C, Python)
◎ 자료구조와 알고리즘/자료구조 이론2024. 4. 14. 13:51[자료구조] 큐 (Queue) - 배열로 구현 (C, Python)

🖥️ 들어가며 큐 (Queue) 는 선입선출 (First In First Out) 구조입니다. 가장 대표적인 예시로는 식당에서 줄 서는 상황이라 할 수 있을 것입니다. 큐는 다양한 애플리케이션에서 매우 중요한 역할을 합니다. 예를 들어, 운영체제에서는 프로세스 관리를 위해 작업들을 큐에 넣고, 네트워크 시스템에서는 데이터 패킷의 전송을 위해 큐를 사용하여 데이터의 순서를 유지합니다. 또한 프린터의 작업 대기열, 웹 서버의 요청 처리 등 실생활에서도 큐의 원리를 적용한 시스템을 쉽게 찾아볼 수 있습니다. 큐는 여러 가지 방식으로 구현될 수 있습니다. 가장 기본적인 형태는 선형 큐(Linear Queue)이며, 이외에도 순환 큐(Circular Queue), 우선순위 큐(Priority Queue), 덱(D..

[CS] 메모리, 캐시 - Direct Mapping Cache
◎ 자료구조와 알고리즘/헷갈렸던 것들2024. 4. 14. 02:07[CS] 메모리, 캐시 - Direct Mapping Cache

여기는 왜 공부 할때마다 헷갈리는지.. 일단 적어두고 나중에 또 다시 봐야 할 것 같다. 우선 메모. Block offset이 없는 자료는 무엇인가? 저 블록이 없는 자료도 있던데 무엇인가? 캐시는 7bit로 나타나는데, 태그는 그럼 캐시의 상위 2bit? 참고 문헌 https://kimtaehyun98.tistory.com/48 Chapter 11. 캐시 메모리 # 본 내용은 한국항공대학교 길현영 교수님의 '컴퓨터 구조' 강의 및 컴퓨터 아키텍처(우종정, 한빛 아카데미)를 바탕으로 작성한 글입니다. 교재에는 메모리에 대한 챕터가 따로 있으나 강의에 kimtaehyun98.tistory.com https://developbear.tistory.com/75 [Chapter 5.2 컴퓨터 구조 및 설계] 직..

[자료구조] 스택 - Stack (C, Python)
◎ 자료구조와 알고리즘/자료구조 이론2024. 4. 13. 21:51[자료구조] 스택 - Stack (C, Python)

우측 상단에서 다크 모드를 끌 수 있습니다! 🖥️ 들어가며 스택(Stack)은 우리 주변에서도 흔히 볼 수 있는 자료구조입니다. 문서 수정 시 되돌리기나, Ctrl-C Ctrl-V라는 좋은 예도 있고, 가장 대표적으로 사용되는 프링글스 과자 예시도 직관적으로 다가옵니다. 즉, 스택은 말 그대로 ‘쌓아놓은 어떤 더미’를 뜻합니다. 스택 스택의 가장 큰 특징은 후입선출(LIFO : Last-In First-Out)입니다. 아래 그림을 보면 이해하기 쉽습니다. 요는 가장 최근에 들어온 데이터가 가장 먼저 나간다 입니다. 스택의 구조 Push : 데이터 삽입 연산 Pop : 데이터 삭제 연산 요소(데이터) : 삽입된 데이터 스택 하단 : 가장 먼저 삽입된 데이터가 있는 곳, 최하단 스택 상단 : 스택의 입출력이..

[자료구조] 연결 리스트 - Linked List (C, Python)
◎ 자료구조와 알고리즘/자료구조 이론2024. 4. 12. 12:52[자료구조] 연결 리스트 - Linked List (C, Python)

🖥️ 들어가며 리스트는 프로그래밍에서 매우 중요한 자료 구조 중 하나입니다. 이는 순서가 있는 데이터의 집합을 관리하기 위한 방법으로, 데이터를 효율적으로 저장하고 검색, 수정, 삭제하는 작업을 수행할 수 있도록 돕습니다. 리스트는 크게 두 가지 유형으로 나눌 수 있습니다. 순차 리스트 (Sequential List) 순차 리스트는 가장 기본적인 형태의 리스트로, 배열을 기반으로 구현됩니다. 배열의 인덱스를 사용하여 데이터에 접근하기 때문에 특정 위치의 데이터를 빠르게 찾거나 읽어올 수 있습니다. 이러한 특성 덕분에 생성 및 데이터 검색(또는 출력) 작업은 순차 리스트에서 매우 효율적으로 이루어집니다. 그러나 순차 리스트는 데이터의 삽입이나 삭제가 비효율적입니다. 특히 리스트의 중간에서 삭제나 삽입 연산..

[백준 / BOJ] 18870번 좌표 압축 (Python C++)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2024. 3. 17. 22:29[백준 / BOJ] 18870번 좌표 압축 (Python C++)

문제 링크 : 18870번: 좌표 압축 (acmicpc.net) 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에 www.acmicpc.net 🖥️ 시작하며 문제를 대충 해석하면 어려울 수 있는 문제다. 찬찬히 뜯어보자. 좌표 압축을 수행하려고 하는데, 조건은 아래와 같다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. 주어진 예시로 보자. 2 4 -10 4 -9 가 입력으로 주어진다. Xi 를 좌표 압축한 결과인 X'i 의 값..

[백준 / BOJ] 2563번 색종이 (Python)
◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2024. 3. 16. 13:00[백준 / BOJ] 2563번 색종이 (Python)

문제 링크 : 2563번: 색종이 (acmicpc.net) 2563번: 색종이 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변 www.acmicpc.net 🖥️ 시작하며 처음의 우여곡절 본인은 처음에 수학적으로 접근했다. 예시 문제를 간단하게 분석해보니 겹치는 부분이 아래와 같은 규칙을 따랐다. 가로축에서, 입력받은 x 값이 더 작은 곳에 +10 을 한 뒤 더 큰 x 값을 뺀다. 예시에서는 3 + 10 - 5 다. 세로축에서도 똑같이 진행한다. 예시에서는 2 + 10 - 7 이다. 그렇게 생각하고 문제를 풀다보니 웬걸, 내가 짠 로직은 인접한 두 리스트만 비교해서 중..

image