전체 글
-
운영체제 - CPU 가상화(스케줄링 & 공유자원 관리)컴퓨터 구조 2021. 5. 7. 02:09
'운영체제 - 아주 쉬운 세 가지 이야기'와 'Computer System - A Programmer's Perspective'를 읽고 작성한 글 입니다. 틀린 부분이 있을 수 있습니다. CPU 가상화 운영체제는 CPU, 메모리, 디스크와 같은 자원들을 가상화시킨다. 내 컴퓨터의 Task Manager 화면을 살펴보자. Logical processor는 4개인데(코어 수와 차이나는 이유는 하이퍼쓰레딩 때문이다.), Process는 251개가 현재 돌아가고 있다. 심지어 Thread의 개수는 3312개다. 한정된 개수의 Logical processor위에서 이렇게 많은 수의 process와 thread가 동작할 수 있는 이유는 운영체제가 CPU를 가상화시켜주기 때문이다. 한정된 자원인 CPU를 무한개의 C..
-
cPython [Deep Dive to Object] - 1Python 2021. 4. 21. 23:31
python에서 Cyclic GC가 어떻게 작동하지 알아보기 위해서 cpython repository를 fork해 놓았었다. 그 당시 깊이 이해하지 못해 별다른 소득이 없었는데(변명이지만, 프로젝트 때문에 정말 바빴다...), 이번 기회에 python에서 object가 무었인지 부터 시작해 깊게 알아볼 계획이다. python에서 object가 도대체 뭔지! 어떻게 관리되는지! 알아보자. 발단 '파이썬의 배열에 끊임없이 원소를 추가하면 어떻게될까?'라는 생각을 하다가 이 고민을 하기 시작하게 되었다. 처음 머릿속에 든 생각은 파이썬은 객체의 Virtual Memory Address를 id로 사용하고, 배열이 저장될 메모리를 재할당하면 id도 바뀌겠지? 라는 생각이었다. 그래서 아래와 같은 간단하고, 귀여운..
-
3월 말 되돌아보기Life 2021. 4. 7. 04:25
3월 말 되돌아보기 2월 말 되돌아보기를 썼던 Virtual Memory에 대해 공부하던 때가 정말 까마득한 옜날처럼 느껴진다. Pintos를 공부하며 가장 재미있었던 부분이 Virtual Memory부분이었고, 그 다음이 Virtual Memory 다음으로 진행했던, File System이었다. 특히 File System을 공부하기 전까지는 파일을 열고, 쓰고, 저장한다는 것이 기존에 구현되어 있었던 스켈레톤 코드가 알아서 해주는 마법처럼 느껴졌었는데, 이제 그 마법을 조금 이해하게 된 것 같다. 어느새 4월 6일이다. 5주간 진행중인 웹 서비스 만들기 프로젝트에 온 힘을 쏟고 있다. 프로젝트를 끝내고 발표를 하는데 딱 열흘 남았다. 지난 한달 간 정말 열심히 살았던 것 같다. 문제는 열심히 하는 것과..
-
Pintos - Virtual Memory컴퓨터 구조 2021. 3. 3. 02:22
Memory Management 현재 pintos에는 lazy loading이 구현되지 않은 상황이다. lazy loading을 구현하기 위해서는 특정 virtual address에 대응되는 page에 대한 정보가 추가적으로 필요하다. 각 page에 관한 정보를 담는 page 구조체를 생성하자. 또한, 이 page들을 supplemental page table이라는 hash table을 통해 관리했다. 추가적으로, user_pool이 가득 차서 page를 더이상 할당해줄 수 없는 경우 page의 정보들을 swap out&swap in 하는 코드까지 구현해 보았다. page는 세가지의 type중 한 가지 종류로 정해지며, 최초에 할당되는 page는 lazy loading을 위한 uninit_page로 설정..
-
2월 말 되돌아보기Life 2021. 3. 2. 23:33
되돌아보기 더보기 10월 되돌아보기 11월 되돌아보기 12월 중순 되돌아보기 12월 말 되돌아보기 1월 중순 되돌아보기 1월 말 되돌아보기 10월 되돌아보기 11월 되돌아보기 12월 중순 되돌아보기 12월 말 되돌아보기 1월 중순 되돌아보기 1월 말 되돌아보기 2월 중순 되돌아보기 2월 말 되돌아보기 이번 2주도 순식간에 지나갔다. 지난 2주간 Pintos의 Virtual memory를 열심히 구현해 보았다. Pintos project 1. Thread scheduling, 2. Systemcall 그리고 3. Virtual memory까지 진행했고, 내일부터 또 1주일 동안 4. File system을 진행할 예정이다. 세개의 project들 중 이번 Virtual Memory가 가장 재미있게 느껴졌다..
-
2월 중순 되돌아보기Life 2021. 2. 17. 21:17
되돌아보기 더보기 10월 되돌아보기 11월 되돌아보기 12월 중순 되돌아보기 12월 말 되돌아보기 1월 중순 되돌아보기 1월 말 되돌아보기 2월 중순 되돌아보기 시간이 점점 빠르게 흐른다. 이번 2주는 설이 껴있어서 그런지 조금은 어수선했다. Pintos Project 1주차에 Thread scheduling을 진행하고 최근 2주동안은 System Call들을 구현해 보았다. Fork, wait, read, write, exit, exec 등등 평소에 당연하게 여겼던 system call들을 구현하면서 OS가 어떻게 작동하는지 엿볼 수 있었다. 우리가 System Call을 잘 구현했는지 확인하기 위한 94개의 test case들이 존재하는데, 방금 마지막 test case까지 완료했다. Test cas..
-
Pintos - System CallSW사관학교 Jungle 2021. 2. 17. 21:06
feat. 2월 중순 되돌아보기 link pintos-kaist-gitbook을 참고해 작성한 글입니다. 2월 4일부터 17일까지 2주간 Pintos의 System Call들을 구현했다. 그동안 당연하게 여기고 사용하고 있었던 함수들, Process 그리고 Thread들이 어떻게 작동하는지 이해하고, 살펴볼 수 있는 기회였다. 이론으로만 막연하게 익혔었던, Lock과 Semaphore를 어떻게 적용할 수 있는지 실습해볼 수 있었던 좋은 기회이기도 했다. Argument Passing pintos에서 main함수를 실행할 때 인자들을 전달하는 argument_stack함수를 구현해 볼 것이다. void _start (int argc, char *argv[]) { exit (main (argc, argv))..
-
1월 말 되돌아보기Life 2021. 2. 4. 13:07
되돌아보기 더보기 10월 되돌아보기 11월 되돌아보기 12월 중순 되돌아보기 12월 말 되돌아보기 1월 중순 되돌아보기 1월 말 되돌아보기 다시 시간이 빠르게 흘렀다. 1월 중순부터 B+ Tree, Malloc LAB, Web server, OS-Thread를 진행하며, 정신없이 달려온 것 같다. 그동안은 혼자서 공부했던 알고리즘 내용들이라 무난하게 진행할 수 있었지만, B+ Tree를 시작으로일주일 일주일을 이겨내는 것이 점점 힘들어지고 있는 듯 하다. 점점 많은 내용들을 공부하면서 내가 알아야 할 내용들이 생각보다 굉장히 많구나라는 생각이 든다. 동시에 내가 지금 잘 하고 있긴 한걸까 하는 생각도 들고 있다. 근 2주간 블로그를 작성하지 않았는데, 블로그를 안쓴다는 데서 오는 불편함도 있는 것 같다...
-
Pintos Project - ThreadSW사관학교 Jungle 2021. 2. 4. 03:33
Pintos Project 1주차 : Thread 2주차 : User programs 3주차 : Virtual memory 4주차 : File system Jungle OS프로젝트가 시작되고 1주일이 지났다. 한 주간 Thread scheduling에 대해 공부하고, 함수들을 수정하며, donate priority까지 구현을 직접 해보았다. 시작할 때만 하더라도, 도통 무슨 소리인지 모르겠고 막막했는데 1주일이 지난 지금 다시 정리하며 많은 것들을 이해하고 있는 나 자신을 볼 수 있었다. 그동안 컴퓨터 시스템 책을 공부하며 동시성 프로그래밍을 가능하게 해주는 thread가 번갈아가며 실행된다고 막연히 알고 있었는데, priority를 고려하고, lock과 함께 사용될때 donation 방식으로(실제 사용..
-
Python - 14425 - 문자열 집합Problem Solving 2021. 1. 25. 13:38
기존에 활동하던 블로그에서 옮겨온 포스팅 입니다. 문자열 집합 link 카카오 기출 중에 Trie자료구조를 활용해 풀어야하는 문제를 접했다. Trie라는 것에 대해 오늘 처음 들어봤기 때문에, 문제를 푸는것을 미루고 이에 대해 먼저 찾아봤다. 우리가 검색을 할 때 볼 수 있는 자동 완성 기능과 같이 문자열을 탐색하는데 특화되어있는 자료구조라고 한다. 각각의 노드들에 자식 노드를 저장시켜 놓고 단어를 탐색한다. 파이썬으로 구현할 때는 dictionary를 활용해 구현한다고 한다. 문제분석 n개의 문자를 입력받고, 다음으로 m개의 문자를 입력받는다. 이때 m개의 문자열 중에 n개의 문자열안에 포함된 문자열이 몇 개인지 알아내서 출력하는 문제이다. 입력범위가 크지 않기 때문에 단순히 배열을 사용해 풀어도 무난..