분류 전체보기 278

Pintos Project1 - 스레드 전반적인 흐름 잡기

✨ 스레드프로그램에서 실행 흐름을 만들어 주는 실행 단위각 스레드는 자신의 스택과 CPU 레지스터 상태를 관리실행할 작업을 기억하고 스스로 수행할 수 있는 독립적인 흐름스레드는 단순히 데이터를 담는 자료구조가 아니라 프로세서에서 실행되는 상태를 담고 있음 ✨ 프로그램 스레드 실행   thread_init → thread_start → thread_create 의 순서대로 진행 1. thread_init ()void thread_init (void)맨 처음 프로그램 실행 시 실행스레드 시스템 초기화하는 역할 전역 변수 및 리스트 초기화매인 스레드 초기화 2. thread_start ()void thread_start (void)스레드 시스템 실제로 시작스케줄링이 가능한 상태로 전환유휴 스레드(idle th..

Pintos Project1 - Priority Scheduling (2)

Pint OS project 1 - Priority Scheduling (1)Pint OS project 1 -Alarm Clock (1)시작 준비가 안됐다면, 아래 포스팅으로 감 잡기 Pint OS project 1 - 시작 준비✨ Pint OS Pintos는 x86-64 아키텍처용으로 설계된 간단한 운영체제 프레임워크Pintos는 커널 스jerry-k.site(바로 이어지는 Priority Scheduling 포스팅)Priority Scheduling (1) 없이 이해하기 힘듬때문에 안봤다면 꼭 봐야 한다.🅿️ Priority Scheduling높은 우선순위의 스레드가 낮은 우선순위 스레드보다 먼저 실행되도록 스케줄링ready_list 우선순위에 따라 정렬ready_list에 새로운 스레드 추가될 ..

Pintos Project1 - Priority Scheduling (1)

Pint OS project 1 -Alarm Clock (1)시작 준비가 안됐다면, 아래 포스팅으로 감 잡기 Pint OS project 1 - 시작 준비✨ Pint OS Pintos는 x86-64 아키텍처용으로 설계된 간단한 운영체제 프레임워크Pintos는 커널 스레드, 사용자 프로그램 로jerry-k.site  🅿️ Priority Scheduling높은 우선순위의 스레드가 낮은 우선순위 스레드보다 먼저 실행되도록 스케줄링ready_list 우선순위에 따라 정렬ready_list에 새로운 스레드 추가될 때마다, 위치 조정스케줄러는 가장 높은 우선순위 스레드 선택해 CPU 할당우선순위에 따른 즉각적인 양보 (추가 된 스레드 높은 우선순위 가지는 경우)즉시 CPU를 양보하여 우선순위가 높은 스레드 실행..

Pintos Project1 - Alarm Clock (1)

시작 준비가 안됐다면, 아래 포스팅으로 감 잡기 Pint OS project 1 - 시작 준비✨ Pint OS Pintos는 x86-64 아키텍처용으로 설계된 간단한 운영체제 프레임워크Pintos는 커널 스레드, 사용자 프로그램 로딩 및 실행, 파일 시스템을 지원 Pint OS projects Project 1 (Threads): 스레드와 동jerry-k.site ⏱️Alarm Clocktimer_sleep() 함수를 수정busy waiting을 피하는 방식으로 재구현 목표timer_sleep() 함수는 devices/timer.c 파일에 있음반복적으로 시간이 경과했는지를 체크하고 thread_yield()를 호출해 CPU를 낭비하는 방식으로 작동하는데, 이를 효율적인 방식으로 개선하는 것이 과제의 핵심..

레지스터 종류

PCB 내부에 무엇이 들어있나 갑자기 궁금해졌다.그 안에는 레지스터의 여러 종류들이 보였고,레지스터에 대해 좀 더 알고 싶어서 포스팅을 만든다. ✨ Address Registers PC (Program Counter, 프로그램 카운터)PC는 일반적으로 순차적으로 진행현재 실행 중인 명령어의 다음 위치 가르키는 주소 저장순차적 실행 흐름이 끊기는 경우특정 메모리 주소로 실행 흐름을 이동하는 명령어 인터럽트 발생 함수 호출 시 PC 값을 스택에 저장하고, 함수 호출이 끝나면 스택에 저장된 값이 다시 PC로 복귀MAR (Memory Address Register, 메모리 주소 레지스터)메모리에서 데이터를 읽거나 쓸 때 필요한 메모리 주소 저장SP (Stack Pointer, 스택 포인터)스택 구조에서 가장 최..

Pintos Project1 -키워드 정리 (코드로 이해하기) / 프로세스, 스레드, 멀티 스레딩 문제

프로세스 (Process) / 스레드 (Thread) 프로세스 (Process)실행 중인 프로그램의 인스턴스독립적 메모리 공간각 프로세스는 각각 독립된 메모리 공간을 가짐다른 프로세스가 접근 불가능고유한 자원 CPU, 메모리, 파일 핸들 등의 자원을 OS로 부터 할당주소 공간 분리프로세스는 독립된 주소 공간을 가짐다른 프로세스의 메모리에 직접 접근 불가능IPC (Inter-Process Communication) 독립된 메모리를 관리하여 컨텍스트 스위칭으로 오버헤드 프로세스 예시#include #include #include int main() { pid_t pid = fork(); // 새로운 프로세스 생성 if (pid This is the parent process. PID: 1234T..

Pintos Project1 - 시작 준비

✨ Pint OS Pintos는 x86-64 아키텍처용으로 설계된 간단한 운영체제 프레임워크Pintos는 커널 스레드, 사용자 프로그램 로딩 및 실행, 파일 시스템을 지원 Pint OS projects Project 1 (Threads): 스레드와 동기화 기초, 기본 스케줄링Project  2 (User Programs): 사용자 프로그램 로딩 및 시스템 호출 구현Project  3 (Virtual Memory): 가상 메모리 관리Project  4 (File System): 파일 시스템 확장 Pint OS projects1  주요 내용기본 스레드 시스템 확장:Pintos에 구현된 간단한 스레드 시스템이 시작점다양한 스레드 관련 기능을 추가 및 동작 방식을 개선 동기화 문제 해결:스레드 시스템의 확장은 ..

네트워크 소켓 및 함수 정리 (CS:APP)

✨ getaddrinfo( )int getaddrinfo(const char *hostname, const char *port, const struct addrinfo *hints, struct addrinfo **result); hostname과 port로 소켓 주소를 얻음IPv4 / IPv6 모두를 지원hostname은 얻고자 하는 호스트 이름  (NULL은 로컬 호스트 주소)hints는 결과 리스트 필터링을 위한 옵션 result 는 결과 리스트의 헤드성공 시 0을 반환 / 실패 시 오류 코드 반 ✨ socket( )int socket(int domain, int type, int protocol);네트워크 통신에서 사용되는 소켓 생성domain은 통신에 사용될 주소 체계 ( AF_INET(IP..

네트워크 핵심 키워드 정리 (네트워크 계층,소켓,CGI,HTTP,Proxy 등등)

📌 파일 디스크립터 (file descriptor)프로세스가 파일이나 입출력 장치에 접근할 떄 사용하는 일종의 "핸들"(여기서 핸들은 실제 자원과 프로세스 간의 연결을 추상화한 정수 값) 1. 파일 열기open() open() 함수로 시스템 호출을 사용한다. 호출이 성공하면 운영체제는 파일 테이블에 새 항목을 추가하고,참조할 수 있는 파일 디스크립터(정수)를 반환한다.  예를들어 파일을 열때 파일 디스크립터로 3이라는 숫자를 반환 받으면,프로세스는 3을 사용해서 그 파일에 접근 (보통 0,1,2는 기본적으로 표준 입력, 출력, 오류에 할당되어 3부터 시작됨) 2. 파일 읽기와 쓰기파일 디스크립터를 이용해아래와 같은 시스템 호출을 통해 데이터를 읽거나 쓸 수 있다.read(fd, buffer, size)..