728x90
반응형

스택 6

PintOS 프로젝트 2주차 [User Programs / Argument Passing]

PintOS는 Command Line에 명령어를 받아 프로그램을 실행할 때, 인자를 인식하지 못한다.ex ) /bin/ls -l foo bar  일 경우, 명령(파일명)과 인자를 나누지 못하고 전부 하나로 인식 Argument Passing은 PintOS의 이러한 점을 개선하여 PintOS가 명령에 대한 파일명과 인자를 구분하여 받을 수 있도록 하는 것이 목표이다. 명령어와 인자들은 command Line으로 입력된 후 process_exec 함수에서 argv 배열에 저장되며, argc 변수엔 인자의 개수가 저장된다. (파일명도 인자다)argv, argc를 이용하여 인자들은 Stack에 저장되어 User Program이 사용하게 되는데, 우리가 Stack에 저장되도록 구현해야 한다.  %rsp는 스택 포..

[크래프톤 정글 5기] 스택, 레지스터, 꼬리 재귀 최적화

스택(stack) - 프로시저 호출 시 “지역 변수와 매개변수”를 저장하기 위한 메모리 공간(지역변수 = 로컬변수) - 후입선출(LIFO, Last In First Out) 구조 스택의 용도 - 함수의 로컬 변수 저장 : 각 함수 호출 시, 그 함수의 로컬 변수들이 스택에 저장된다. - 함수의 제어 흐름 관리 : 함수가 다른 함수를 호출할 때, 반환 주소와 이전 함수의 스택 프레임 정보가 스택에 저장된다. - 장점 : 동적으로 메모리 할당/해제 가능, 구현이 간단함, 메모리 관리 overhead가 낮음 스택의 특징 - 스택에서 데이터가 삽입되고 빠져나가는 쪽을 top 이라고 한다. 반대쪽은 bottom이다. - %rsp 레지스터는 스택 포인터이다. 스택 포인터는 항상 스택의 top 주소를 가리키고 있다...

[크래프톤 정글 5기] week03 알고리즘 주차 열아홉번째 날, CS, 어셈블리어, 레지스터, 오퍼랜드, 메모리 주소, 스택 포인터

Byte : 8bit Word : 16bit Double Word : 32bit Quad Word : 64bit CPU의 16개 범용 레지스터 - 각 범용 레지스터의 크기는 64bit이다. - 16개의 레지스터에 있는, 여러 크기의 하위 바이트 데이터에 대해 연산이 가능하다. - %rsp : 스택 포인터이며, 런타임 “스택의 끝 부분(Top)”을 가리킨다. 레지스터의 역사 8086 - 8개의 16비트 레지스터 - %ax ~ %sp IA32 - 32비트로 확장 - %eax ~ %esp x86-64 - 기존의 8개의 레지스터가 64비트로 확장 (%rax ~ %rsp) - 8개의 새로운 레지스터 추가 (%r8 ~ %r15) 레지스터는 1, 2, 4, 8 바이트 단위로 사용할 수 있다. 8바이트를 사용하는 경우..

[크래프톤 정글 5기] week01 알고리즘 주차 네번째 날, 스택, 큐, DFS, 그래프, 백트래킹, 이분 탐색

스택(Stack) - 후입선출(Last In First Out) 구조 - 마지막에 들어온 데이터가 가장 먼저 나간다 - 파이썬에서는 리스트와 pop(), append() 메소드로 스택을 구현할 수 있다 큐(Queue) - 선입선출(First In First Out) 구조 - 먼저 들어온 데이터가 가장 먼저 나간다. “공정한 자료구조” - from collections import deque 사용해서 deque 자료구조를 활용하는 게 좋다 - deque는 스택, 큐의 장점을 모두 채택한 것인데 리스트에 비해 빠르고 queue 라이브러리를 이용하는 것 보다 간단하다 - append(), popleft()를 이용하여 큐를 구현할 수 있다 DFS(Depth-First Search, 깊이 우선 탐색) - 그래프에..

[Baekjoon 15649 / python / 실버3] N과 M(1)

def dfs(graph, selected, m): # 숫자목록, 현재선택된숫자리스트, 모을 숫자의 개수 if len(selected) == m: # 선택된 숫자가 m개면 출력 print(*selected) # ex) [1, 2, 3] -> 1 2 3 이렇게 출력됨 return # 출력을 했으면 상위 노드로 돌아가 다른 경우의 수 찾음 for i in range(1, len(graph)): # 1부터 n까지 탐색 if not visited[i]: # 방문 안했었다면 값 추가, 이 숫자를 점유한다는 느낌 visited[i] = True # 숫자는 중복되면 안 되니까, 하위 노드에서 이 숫자를 쓰지 않도록 True로 해둔다(점유한다) selected.append(i) dfs(graph, selected, m..

Algorithm/DFS 2024.03.24
728x90
반응형