본문 바로가기
728x90

KraftonJungle2기56

[TIL] Pintos Project1 - Threads 정리 ※ git book 기준으로 이해한 내용 정리 ※ 0. 개념 및 코드 정리 1. thread CPU 이용의 기본 단위, 동일 프로세스의 스레드들은 코드 영역, 데이터 영역, 운영체제 자원들을 공유 핀토스에서는 단일 스레드 프로세스(Single thread process)를 구현! 그러므로 프로세스의 상태변화가 스레드의 상태변화와 동일하다고 생각하고 구현함 이러한 멀티 프로그래밍의 목적은 CPU 사용률을 최대화하기 위함이며, 어떤 프로세스든 항상 실행 중이게 한다. time sharing(시분할 시스템) : 여러 프로세스 사이에서 CPU를 자주 전환함으로써 여러 사용자 프로그램이 수행되는 동안 각 프로그램과 상호작용할 수 있도록 한다. Process scheduler : CPU에서 프로그램 실행을 위해 실.. 2023. 6. 28.
[WIL] Pintos 4주차 - VM(2) (주간공유) 1. 일정 ✅ 06.19 ~ 06.20 Git book 기준 lazy loading 구현 완료 Git book 기준 stack growth 구현 완료 ✅ 06.21 ~ 06.23 Git book 기준 Memory mapping 구현 완료 ✅ 06.24 ~ 06.25 Git book 기준 Swap In/Out 구현 완료 2. 주요 학습 1. Stack growth 사용 이유 프로세스가 실행 중인 동안에 함수 호출 깊이가 깊어지거나 큰 지역 변수 등으로 인해 스택의 공간이 부족해질 수 있다. 이 때 필요한 만큼 스택 영역을 '성장'시키는 메커니즘이 필요합니다. 이를 "스택 성장(stack growth)"이라고 합니다. 2. Pintos 에서 구현된 방식 1. 초기 스택 상태 static bool setup_.. 2023. 6. 25.
[WIL] Pintos 3주차 - VM(1) (주간공유) 1. 일정 ✅ 06.12 ~ 06.15 가상 메모리 개념 공부 git book 읽기 및 강의 학습 운영체제 책 읽기 ✅ 06.16 Git book 기준 Memory Management 구현 ✅ 06.17 ~ 06.18 Git book 기준 Anonymous Page 구현 2. 진행 상황 1. SPT 구조 pml4가 페이지 테이블을 의미한다는 것을 알게 되었습니다. git book 기준으로 Memory Management 구현 완료 2. Anonymous Page 구현은 해본 상태 Project 2 - userprog (....All fail....) 123 of 141 tests failed 2023. 6. 18.
[TIL] Pintos - 가상 메모리 관련 개념 공부2 1. 아침 문제 풀이 1. 10026번 - 적록색약 import sys from collections import deque N = int(sys.stdin.readline()) pic = [list(sys.stdin.readline().strip()) for _ in range(N)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y) : queue = deque() queue.append((x, y)) visited[x][y] = True while queue : cx, cy = queue.popleft() for i in range(4) : nx, ny = cx + dx[i], cy + dy[i] if nx >= 0 and nx = 0 .. 2023. 6. 15.
[TIL] Pintos - 가상 메모리 관련 개념 공부1 1. 아침 문제 풀이 1. 2023번 - 신기한 소수 import sys N = int(sys.stdin.readline()) result = [] #소수인지 판별하는 함수 def isPrime(n) : for i in range(2, int(n**(1/2))+1) : if n % i == 0 : return False return True #백트래킹 방식을 사용한 탐색 def dfs(depth, n) : if depth == N : if isPrime(n) : result.append(n) return for i in range(10) : nn = n*10 + i if isPrime(nn) : dfs(depth+1, n*10+i) prime = [2, 3, 5, 7] for p in prime : df.. 2023. 6. 14.
[WIL] Pintos 2주차 - Userprog (주간공유) 1. 일정 계획 ✅ 06.01 대략적인 일정 조율 개인 이론 공부 ✅ 06.02 gitbook 및 강의 학습 ✅ 06.03 ~ 06.05 passing argument 구현 ✅ 06.06 ~ 06.11 system call 구현 2. 주요 학습 user mode vs kernel mode 1. user mode User 모드에서는 제한된 시스템 자원에만 접근 가능 파일 시스템, 네트워크 연결, 입출력 장치등과 같은 일반적인 작업을 수행할 수 있지만, 직접적으로 시스템 리소스에 접근하거나 시스템 제어 명령을 실행할 수 없다. 2. kernel mode 유저 모드에서 요청 → syscall_entry를 통해 어셈블리어로 진입 → rsp = 커널 스택 포인터 syscall_handler : 시스템 호출의 요구.. 2023. 6. 12.
[TIL] 1377번 - 버블 정렬 1. 1377번 - 버블 정렬 import sys N = int(sys.stdin.readline()) array = [[int(sys.stdin.readline()), i] for i in range(N)] array.sort() max = -sys.maxsize for i in range(N) : t = array[i][1] - i if max < t : max = t print(max+1) 이 문제는 버블 정렬시 완료되는 반복 횟수를 구하는 문제이다. 주어진 c++ 코드로도 답은 구할 수 있지만 시간초과가 발생했다. 즉, 이중 반복문을 제거할 수 있어야 한다. 위의 그림은 버블 정렬 과정을 써본 것이다. 버블 정렬은 맨 뒤에서 부터 큰 값이 먼저 정렬된다. 그러므로 정렬되지 않은 값 중 가장 큰 값.. 2023. 6. 7.
[TIL] OS - System Call 1. 운영체제 서비스(Operating System Service) 사용자에게 도움을 주기 위한 기능 사용자 인터페이스(User Interface) GUI(그래픽 사용자 인터페이스) CLI(명령어 라인 인터페이스) Batch Interface(일괄처리 인터페이스) https://ko.wikipedia.org/wiki/사용자_인터페이스 프로그램 수행(Program Execution) 프로그램을 메모리에 적재(load)해 구동(Run)하고 실행(Execute)할 수 있어야 한다. 정상적이든 비정상적이든 실행을 끝낼 수 있어야 한다. 입출력 연산(I/O Operation) 수행 중인 프로그램은 입출력을 요구할 수 있다. 효율과 보호를 위해 사용자들이 직접 제어를 할 수 없으므로 운영체제가 수단 제공 통신(Co.. 2023. 6. 7.
[WIL] Pintos 1주차 - Threads (주간공유) 1. 일정 계획 ✅ 05.25 개인 노트북에 우분투 환경 설정 대략적인 일정 조율 개인 이론 공부 ✅ 05.26 git book 읽기 os (thread, processor 등) 관련 개념 공부 및 공유 ✅ 05.27 Alarm 구현 1일차 thread.c timer.c 코드 분석 ✅ 05.28 Alarm 구현 2일차 ✅ 05.29 Priority 구현 1일차 synch.c 코드 분석 ✅ 05.30 Priority 구현 2일차 ✅ 05.31 Priority 구현 3일차 2. 주요 학습 synch.c - lock_acquire() : donation list 저장방식의 차이 1. donate 가능한 모든 후보자들 저장 void lock_acquire (struct lock *lock) { ASSERT (l.. 2023. 6. 1.
[TIL] OS 용어 정리 1. 아침 문제 풀이 1. 1049번 - 기타줄 import sys N, M = map(int, sys.stdin.readline().split()) min_six = sys.maxsize min_one = sys.maxsize # 가장 작은 가격 구하기 for _ in range(M) : six, one = map(int, sys.stdin.readline().split()) if min_six > six : min_six = six if min_one > one : min_one = one count = N // 6 + 1 #6의 배수가 되도록하면서 적어도 N보다 큰 몫 구하기 a = min_six * count # 묶음으로만 구매할 경우 b = min_one * N #낱개로만 구매할 경우 c = m.. 2023. 5. 26.
[TIL] Thread 개념 정리 1. 아침 문제 풀이 1. 26069번 - 붙임성 좋은 총총이 import sys N = int(sys.stdin.readline()) dance = {'ChongChong' : 1} for _ in range(N) : a, b = sys.stdin.readline().split() # 두 사람 중 한 사람만 춤을 추고 있는 경우를 나눠 dance 목록에 저장 if a in dance and b not in dance: dance[b] = 1 elif a not in dance and b in dance : dance[a] = 1 print(len(dance)) 가볍게 Dictionary를 이용해 푼 문제 2. Thread 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위 프로세스의 c.. 2023. 5. 25.
[TIL] 7주차 - 넘겼던 부분 동료학습 정리 1. 아침 문제 풀이 1. 2559번 - 수열 - 2023.05.24 import sys N, K = map(int, sys.stdin.readline().split()) nums = list(map(int, sys.stdin.readline().split())) result = sum(nums[:K]) # 구해야할 값 curr = result # 현재 0부터 K-1까지 연속된 값의 합 for i in range(K, N) : curr = curr - nums[i-K] + nums[i] # 맨앞의 값은 빼고 뒤에 값 추가(슬라이딩 윈도우) if curr > result : result = curr print(result) 전에 공부했던 슬라이딩 윈도우를 사용하여 푼 문제 요즘 점점 풀수록 어떤 알고리즘을.. 2023. 5. 24.
[TIL] Proxy 개념 정리 1. 아침 문제 풀이 1. 2108번 - 통계학 import sys import math N = int(sys.stdin.readline().strip()) nums = {} # 입력받은 수들의 등장 횟수 lst = [0] * N # 입력받은 수들 sum = 0 for i in range(N) : num = int(sys.stdin.readline().strip()) if num in nums : nums[num] += 1 else : nums[num] = 1 lst[i] = num sum += num lst.sort() nums = dict(sorted(nums.items())) nums = sorted(nums.items(), key= lambda x : -x[1]) print(round(sum/N).. 2023. 5. 24.
[TIL] CSAPP 11장 공부4 - tiny 서버 정리 1. 아침 문제 풀이 1. 20920번 - 영단어 암기는 괴로워 import sys N, M = map(int, sys.stdin.readline().split()) words = {} # key = 영어단어 / value = 영어단어 입력 횟수 for _ in range(N) : w = sys.stdin.readline().strip() if len(w) >= M : if w in words : words[w] += 1 else : words[w] = 1 # 단어를 사전 순으로 정렬 words = dict(sorted(words.items())) # 단어를 입력 횟수가 많은 순으로 정렬하되 같으면 길이가 긴 것부터 정렬 words = dict(sorted(words.items(), key=lambda .. 2023. 5. 22.
[TIL] CSAPP 11장 공부3 - 웹 서버 1. Web 기초 1. HTTP(Hypertext Transfer Protocol) 웹 상에서 웹 서버 및 웹 브라우저(클라이언트) 상호 간의 데이터 전송을 위한 응용(계층 프로토콜 텍스트 기반 응용수준 프로토콜로 주로 HTML 문서를 주고받는데 사용된다. https://ko.wikipedia.org/wiki/HTTP 웹 서버 포트 번호 : 80 요청/응답(Request/Response) 프로토콜 클라이언트 → 서버 : 콘텐츠 요청 서버 → 클라이언트 : 요청받은 콘텐츠로 응답 🔗 http://www.ktword.co.kr/test/view/view.php?m_temp1=4884&id=902 HTTP Method 클라이언트가 웹 서버에게 요청하는 목적 및 그 종류를 알리는 수단 GET : 리.. 2023. 5. 21.
[TIL] CSAPP 11장 공부2 - 예제 echo 서버 1. 상위 수준의 도움 함수 1. open_clientfd() 클라이언트는 이 함수를 호출하여 서버와 연결을 설정한다. 2. open_listenfd() 서버는 이 함수를 호출해서 연결 요청을 받을 준비가 된 듣기 식별자 생성 ▶ setsockopt() : 소켓 세부 사항 설정 int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); sock : 소켓 파일 디스크립터 level : 프로토콜 레벨 전달 SOL_SOCKET : 일반 IPPROTO_IP : IP - IPv4 IPPROTO_TCP : TCP optname : 변경할 옵션의 이름 SO_REUSEADDR : 이미 사용중인 주소나 포트에 대해서도 바인.. 2023. 5. 20.
[TIL] CSAPP 11장 공부 - 네트워크 1. 아침 문제 풀이 1. 1966번 - 프린터 큐 - 2023.05.18 import sys from collections import deque testcase = int(sys.stdin.readline()) for _ in range(testcase) : N, M = map(int, sys.stdin.readline().split()) priorty = list(map(int, sys.stdin.readline().split())) queue = deque() for i in range(N) : queue.append((i, priorty[i])) # 원래 위치와 중요도를 같이 큐에 넣어준다. count = 0 while queue : flag = True #True일 경우 출력 가능 / Fals.. 2023. 5. 19.
[TIL] CASPP 9장 공부5 - 간단한 할당기3(segregated) 1. 아침 문제 풀이 1. 1359번 - 복권 import sys from itertools import combinations N, M, K = map(int, sys.stdin.readline().split()) jimin = list(combinations(range(N), M)) # 지민이가 뽑을 수들의 조합 result = list(combinations(range(N), M)) # 당첨 결과들의 조합 luck = 0 # 당첨된 횟수 저장 for jm in jimin : for re in result : count = 0 # 현재 지민이와 결과가 같은 수의 개수 for i in range(M) : for j in range(M) : if jm[i] == re[j] : count += 1 if c.. 2023. 5. 17.
728x90