👨‍💻 Seungineer's GitHub Contribution

전체 글 59

[PintOS] User Program - Arguments parsing (Project 2, TIL)

KAIST PintOS 강의 및 Instruction, 한양대 PintOS Slides를 참고하며 학습한 내용을 정리하였습니다.학습 도중 작성한 내용이라 틀린 내용이 있을 수 있습니다. Arguments ParsingCommand Line에 대해 공백(' ') 단위로 분리해야 한다. 현재는 Arguments가 분할되지 않아 하나의 배열로 입력되고 있다. 이렇게 입력되면, filename을 찾을 수도 없거니와 여러 명령 옵션을 사용할 수가 없다. 핀토스에서는 '문자열 분리' 함수(strtok_r())를 지원하므로 이를 사용할 수 있다.strtok_r()tid_tprocess_create_initd (const char *file_name) { char *fn_copy; char *temp_ptr; char..

[PintOS] User Program - 배경지식(Project 2, TIL)

KAIST PintOS 강의 및 Instruction, 한양대 PintOS Slides를 참고하며 학습한 내용을 정리하였습니다.학습 도중 작성한 내용이라 틀린 내용이 있을 수 있습니다.Project 2 : User Programs최종 구현되어야 할 것현재 핀토스는 새로운 프로세스(User process)를 생성한 후 scheduling() 될 때 Init process가 종료(exit)되기에 User process 실행이 불가능하다. 최종 구현 후에는 Init process가 mother of all process로, '자식 process의 완료 대기 상태가 되고, User process 종료 후에 exit 및 프로세스 종료되어야 한다.thread_create()커널 스택에 4KB 공간의 Page를 하나..

[PintOS] Thread - Priority Scheduling (Project 1, WIL)

들어가기 전에운영체제의 동작 과정(Dual-Mode Execution)User Mode : 일반적 응용프로그램 구동 환경Kernel Mode : 커널 구동 환경(User Mode와 달리 system call(H/W 관련) 호출 가능) ◀️ PintOS 환경첫 운영체제 구동 시 초기화 작업 및 부팅 작업으로 인해 커널 모드로 시작되고, 곧바로 사용자 모드로 전환된다. 이는 Kernel Mode에서의 작업이 컴퓨터 전반에 영향을 줄 수 있는 작업이기에 일반 사용자의 접근을 제한하기 위함이다.User Mode에서 'system call'을 호출User Mode에서 작업이 불가능한 것을 운영체제에 위임Interrupt?Interrupt(인터럽트)란 컴퓨터 시스템에서 발생하는 '중단 신호'로 CPU가 특정 프로그..

[PintOS] Thread - Alarm Clock (Project 1)

KAIST Jungle 7주차, OS 프로젝트를 진행하며 학습한 내용을 정리한 글입니다. 들어가기 전에프로세스는 뭐고 스레드는 뭔가요? [유튜브 영상 강의]CPU의 동시성은 여러 작업을 일부분씩 context switching 하면서 진행됨A, B, C 작업 동시 처리 시 순서대로 A(5% 수행)▶️ B(5% 수행) ▶️ C(5% 수행) ▶️ A(10% 수행)▶️ B(10% 수행) ▶️ C(10% 수행) ... (반복) ▶️ A(100% 수행)▶️ B(100% 수행) ▶️C(100% 수행)병렬성은 프로세스 하나에 코어 여러 개가 달려서 각각이 작업을 동시에 진행하는 것(작업분담)첫 번째 코어에서 A작업, 두 번째 코어에서 B작업, 세 번째 코어에서 C작업을 같은 시점에 작업함한 프로세스(ex. 크롬) 내..

[CS:APP] 11. 네트워크 프로그래밍(을 들어가기 전에)

6주차는 CS:APP의 11장을 참고하여 '웹서버 만들기'를 진행한다. 11장을 읽기 전에 기본적인 선수지식에 대해서 정리해 보았다. ☑️ TCP/IP, HTTP는 무엇일까? 계층 전송 계층 네트워크 계층 응용 계층 주 기능 데이터 전송의 신뢰성 보장 데이터 패킷의 주소 지정 및 경로 설정 웹 서버와 클라이언트 간의 데이터 교환 데이터 단위 세그먼트 패킷 메시지 프로토콜 연결 지향적 비연결 지향적 상태가 없음 TCP(Transmission Control Protocol) 데이터의 정확한 전송을 보장한다. 데이터를 세그먼트로 나누고, 순서대로 전송하며, 손실된 데이터는 재전송함 데이터 전송 전에 통신하는 두 지점 간에 연결을 설정함(신뢰성 있는 데이터 전송 보장) IP(Internet Protocol) 각..

[CS:APP] 9.9 동적 메모리 할당(#연습문제 9.6 #연습문제9.7 #malloc)

9.9 동적 메모리 할당 "가상 메모리의 영역을 저수준의 mmap과 munmap 함수를 사용해서 생성하고 삭제할 수 있지만, C 프로그래머들은 대개 추가적인 가상 메모리를 런타임에 획득할 필요가 있을 때, '동적 메모리 할당기'를 사용하는 것을 좀 더 편리하고 호환성이 좋다고 생각한다. 명시적 할당기 : Application이 명시적으로 할당된 블록을 반환해 줄 것을 요구 C 표준 라이브러리는 malloc 패키지라고 하는 명시적 할당기를 제공함(malloc, free, C++의 new, delete) 묵시적 할당기 : 언제 할당된 블록이 더 이상 프로그램에 의해 사용되지 않고 블록을 반환하는지를 할당기가 검출할 수 있을 것을 요구 묵시적 할당기는 garbage collector라고 알려져 있으며, 자동으..

[SW 정글 26일차] Red-Black tree (#삽입)

RB tree는 자가 균형 이진 탐색 트리(Self-Balanced Binary Search Tree)의 한 종류로, 검색, 삽입, 삭제 등의 동작을 최악의 경우에도 O(log n) 내에 처리할 수 있도록 설계되었다. RB tree는 각 노드가 빨강 또는 검정의 색깔을 가지며, root부터 leaf(NIL)까지의 모든 경로에 대해 블랙 노드의 수가 동일하게 유지되도록 규칙을 적용하여 균형을 맞춘다. RB tree를 사용하는 이유는 데이터의 삽입, 삭제, 검색 작업 시 '항상 균형 상태를 유지'함으로써, 트리의 높이가 최소한으로 유지되어 효율적인 시간 복잡도를 보장한다. Binary Search Tree란, 정렬된(ordered, or sorted) binary tree이며 노드는 2개의 서브트리를 가질 ..

[SW 정글 25일차] '컴퓨팅 사고로의 전환' 끝! ➡️ '탐험 준비' 시작!

Week 1 ~ 3, '컴퓨팅 사고로의 전환'이 마무리 되었다. 발제명과 같이 기존 사고 방식을 컴퓨팅과 동일한 사고 방식으로 전환하기 위해 알고리즘 문제를 활용하였다. 알고리즘 문제를 컴퓨터가 해결할 수 있도록 파이썬으로 코드를 짠다. 이렇게 코드를 짜며 내가 사고하는 방식을 컴퓨터가 처리할 수 있는 방식대로 동기화하는 주차였다. 3주간 알고리즘 문제들을 컴퓨터에게 해결시켜(?) 본 결과 어느정도 사고 방식이 동기화가 되는 것 같다(아주 조금). 다만, 아직도 time, space complexity 를 줄일 수 있는 방식을 떠올리지 못 하고 있다. 조금 더 공부하고자 하는 부분이다. 또한 백준에 아직 접근해보지 못 한 문제들이 많이 남아 있다. 이러한 문제들을 경험해보면서 더 능숙하게 컴퓨터에게 일을..

[SW 정글 21일차] 귀납적 사고(#DP #백준 9084 #백준 2294)

재귀에 대해서 공부하면서 '절차지향적 사고'가 아닌 '귀납적 사고'로 접근해야 한다는 얘길 들었다. 그 당시에 어렴풋이 이해했던 부분이 동적프로그래밍을 공부하면서 좀 더 선명히 이해가 되는 것 같아 기록해두고자 한다. 백준 9084 이 문제는 동전의 type이 주어질 때 주어진 금액을 만드는 모든 방법의 수를 출력하는 것이다. 동전의 최대, 최소 개수가 아닌 경우의 수를 모두 합한 값을 출력해야 한다. 주어진 금액에서 시작하여 모든 경우를 절차대로 타고 들어가면 복잡하다. 또한 '중복 부분 문제'가 발생한다. 그러므로 DP를 활용해본다. 1. 테이블 정의하기 dp[i] 는 'i를 만들기 위해 필요한 모든 방법의 수로 정의한다. 이렇게 정의해본 이유는 간단히 dp[주어진 금액] 하면 정답을 찾을 수 있기 ..

[SW 정글 20일차] 반례가 존재하는 것 같았는데..! 없었다 (백준1931 파이썬)

백준 1931 문제를 풀다가 85%에서 '틀렸습니다'가 나왔고, 틀리게 만든 케이스에 대해서 고민을 하였다. 몇 가지 반례를 찾을 수 있었다. 이를 해결한 코드를 제출하여 '맞았습니다'가 나왔다. 제출 이후 문득 생각난 케이스가 있어 '맞았습니다'가 나온 코드에 넣어서 테스트해 보았다. 예상 결과와 다른 값을 출력했다. 백준에서 검증하지 않은 케이스인 줄 알았지만, 글을 쓰면서 내가 생각을 잘못했다는 것을 깨달았다... 💩 그래도 잠깐이나마 백준 사이트의 '데이터를 추가한 사람' 리스트에 이름을 올릴 수 있나 행복회로를 돌렸기에 기록해두고자 한다. 백준 1931 문제 요약 입력되는 N개의 회의 시작, 끝 시각을 바탕으로 가장 많은 회의를 진행할 수 있는 경우의 수를 출력하는 것이다. 물론 회의실이 1개이..

[SW 정글 19일차] 동적 프로그래밍과 분할정복법

동적 프로그래밍(DP)은 '큰 문제를 '작은 문제를 해결하며 나온 해'를 결합하여 해결하는 것'이다. 이는 분할 정복법과 유사해 보인다. 분할 정복법 또한 '원래 문제를 몇 개의 부분 문제로 분할하며 재귀적으로 해결'한다. 이렇게 찾은 부분 문제의 해를 결합하여 원래 문제의 해를 찾는다. 그렇다면 DP와 차이점은? DP는 문제에 최적 부분 구조(optimal substructure)와 중복 부분 문제(overlapping subproblems)가 있을 때 적용할 수 있다. 최적 부분 구조란, 부분 문제의 최적해가 원래 문제의 최적해 속에 포함되어 있다는 것이다. 중복 부분 문제는 부분 문제들을 해결해 가는 과정에서 중복되는(=동일한 값을 계산하기 위한) 값을 반복해서 풀게 되는 것이다. 위 그림은 분할 ..

[SW 정글 18일차] CSAPP: 컴퓨터 시스템으로의 여행

노션에 정리해둔 내용을 블로그에 옮기면서 한 번 더 복습하고자 한다. 1. 컴퓨터 시스템으로의 여행 1.1 정보는 '비트'와 '컨텍스트'로 이루어진다 아스키 표준 : 각 문자를 바이트 길이의 정수 값으로 나타낸다. #include int main ()..... ----------------------------------------------------------------------------------------- #| i | n | c | l | u | d | e |SP 35| 105| 110| 99| 108| 117| 100| 101| ...

[SW 정글 16일차] list를 할당 후 수정했는데, 원본이 바뀌어요 (#mutablle객체 #python)

python을 통해 한 리스트를 다른 변수에 할당하는 경우가 자주 있다. 리스트를 변수에 할당하는 것이 (새로운 변수에)복사되었다고 착각할 때, 예상과 다른 결과가 출력될 것이다. 아래 케이스는 착각하게 되는 시나리오이다. list1 = [1, 2, 3, 4] list2 = list1 # list1을 list2에 '복사' # list2 수정 list2[1] = 100 list2.append(5) # list2 출력 print(list2) # [1, 100, 3, 4, 5] # list1은 그대로겠지? print(list1) # [1, 100, 3, 4, 5] 🤔 list2를 수정(조작)했는데, list1이 동일하게 변경되었다. 의도한 것이 아닐 것이다. 이렇게 작동 되는 이유에 대해 알아본다. pyth..

[🧭️Jungle] Own project(Finished)- TIL

이전 글에서 이어집니다. 2024.01.14 - [🔨 TIL/🧭 KAIST JUNGLE] - [🧭️Jungle] Own project - TIL [🧭️Jungle] Own project - TIL ⛏️Own Project URL, Memo를 저장할 수 있으며, card columns 형식으로 저장했던 내용을 기본적으로 표시하는 사이트. ✔️ 막히는 부분 Card Columns를 표시: 완료(Bootstrap Document에서 가져옴(단순 Div 태그 통 seungineer.tistory.com ⛏️Own Project URL, Memo를 저장할 수 있으며, card columns 형식으로 저장했던 내용을 기본적으로 표시하는 사이트. ✔️ 막히는 부분 ... 현재는 Card Columns를 수동으로 표시..

🧭 KAIST JUNGLE 2024.01.15

[🧭️Jungle] Own project - TIL

⛏️Own Project URL, Memo를 저장할 수 있으며, card columns 형식으로 저장했던 내용을 기본적으로 표시하는 사이트. ✔️ 막히는 부분 Card Columns를 표시: 완료(Bootstrap Document에서 가져옴(단순 Div 태그 통한 img, title, content 표시)) 표시하는 내용으로는 DB에서 저장했던 정보를 가져와야 함 MongoDB? pymongo → Flask를 통해서 DB의 데이터 가져오기 → HTML에 표시할 때, jQuery를 써서 알맞은 순서대로 Img, Title, Memo 뿌리기 (어떻게 HTML에서 DB에 있는 데이터를 가져오는 거지?) 현재는 Card Columns를 수동으로 표시했지만, DB에 있는 저장된 정보의 개수 만큼 표시하도록 수정 ..

🧭 KAIST JUNGLE 2024.01.14

[🧭️Jungle] Web Scraper, Flask, Own project - TIL

Flask - Flask란, 파이썬 웹프레임워크로 간편하게 server를 호스팅할 수 있게 해준다. - Flask 서버 실행 서버 실행 시 프레임워크 간 충동을 피하기 위해서 '가상 환경'에서 작업을 진행했다. '가상 환경(Virtual Environment)'이란, 작업 폴더 내에서 하위 폴더를 만들어 이 안에서 프레임워크를 관리할 수 있게 한다. 이를통해 전체 환경 하에서 작동하던 프레임워크와의 충돌 및 간섭을 막고 버전관리를 돕는다. (* 가상환경을 나누는 이유 ① 배포 시 불필요한 프레임워크 설치 방지 및 동일 버전으로 설치하기 위해 ② 서버의 python 버전에 무관하게 사용 가능하기에 python 버전에 따라서 지원하지 않는 프레임워크(ex. Django)가 있는 경우 유용) - Flask 기..

🧭 KAIST JUNGLE 2024.01.13

[🧭️Jungle] jQuery, Ajax, mongoDB - TIL

jQuery 요약: jQuery는 콘솔창에서 특정 id를 갖는 요소에 명령을 던지는 것이다. Input Box의 값을 가져오거나 수정할 수 있고, 을 보이거나 숨기거나 할 수 있다. 더불어 CSS의 속성값도 가져올 수 있다. 역시 문제를 풀면서 실제로 내가 아는지 모르는지 확인하는 게 가장 정확하다. 문제를 풀면서 jQuery, JS에 대해서 더 와닿게 되었다. CSS 문법 형식과 JQ, JS는 쓰임이 다르기에 문법이 다르고(당연하지만, 유사한 기능(display 등)을 하는 부분이 있어서 헷갈렸다) CSS로 설정을 해줘야 할지, JQ, JS로 조작을 해야 할지 먼저 생각해 보고 코딩하는 것이 좋겠다. 예시 - 한 Div 태그를 처음 페이지 loading 시 특정 상태로 유지할 수 있도록 할 때 #pos..

🧭 KAIST JUNGLE 2024.01.11

[🧭️Jungle] Bootstrap, JS - TIL

요약: 부트스트랩은 CDN(Content Delivery Network)을 활용하여 온라인에 한 데 모여 있는 CSS를 사용하는 것. 부트스트랩을 불러오기 위해서는 HTML 에 link 태그로 cdn 링크를 연결시켜주어야 한다. JavaScript는 HTML에서 번역되는(사용되는) 언어이다. 웹 브라우저의 콘솔 창에서 실행 및 결과를 보거나 할 수 있다. 더불어 JS의 기초 문법이 있는데, 파이썬과 유사한 구조를 갖고 있으며, let, for문 등을 사용하는 방식만 다르다. JS를 통해서 알고리즘 문제를 풀 수도 있다.

🧭 KAIST JUNGLE 2024.01.10

[🧭️Jungle] HTML, CSS - TIL

요약: Client 단에서 Server에 API에 맞게 요청하면 Server 단에서 미리 준비된 HTML, CSS를 보내준다! 이를 브라우저가 해석해 뿌려준다. 그래서 HTML을 '개발자 도구'에서 수정할 수 있는 것이고, 새로고침 하면 다시 수정 전의 HTML로 돌아가는 것이다. HTML은 Div라는 Tag로 구성되어 화면이 분활되는 게 기본이다. CSS는 Tree 구조(부모-자식 구조)에 Style을 적용시키는 Sheet이다. CSS는 Class, id, Tag로 구분하여 Style 적용이 가능하다. 이런 특징으로 일관된 디자인을 적용하기 수월하다.

🧭 KAIST JUNGLE 2024.01.08