컴퓨터 사이언스 34

REST API [간단정리]

어떤 방식으로 요청하고, 어떤 방식으로 응답할지를 지정해 놓은 다양한 형식들 중 하나 요청의 메서드와 URI 자체가 목적을 명확히 나타나도록 작성해야 함 -> URI만 보고도 어떤 기능을 할지 추측하도록 작성해야 함 REST API 특징1. 리소스 기반 구조 모든 것을 리소스로 표현, 각 리소스는 고유한 URI를 가진다. URI에 어떤 자원에 관한 것인지 표현해야함 // 가능한 해당 자원에 대해서만 표현해야함 유저에 관한 URI GET /Users/{id} // id 값으로 유저 정보 조회 DELETE /Users/{id} // id 값을 갖는 유저 정보 제거 리소스 예시 Users, members, ..

지연 로딩(Lazy Loading), Demand Zero Memory, Copy on Write, Memory Copy [간단 정리]

지연 로딩객체나 리소스를 실제로 필요할 때까지 로드하지 않는 방법 메모리 사용량을 최적화하고 시스템 성능을 향상시키는 강력한 기법- 가상 메모리 주소를 할당 했지만, 물리 메모리 주소와 매핑되어 있지 않은 상태 (물리 메모리에 적재도 되어 있지 않음)- 배틀그라운드에서 필요한 부분만 렌더링하고 필요하지 않은 부분은 렌더링하지 않는 것과 유사 (이는 지연 로딩은 아니지만 유사)익명 페이지와 파일 기반 페이지[익명 페이지]익명 페이지의 경우 가상 메모리만 할당되어 지연 로딩을 수행한다.해당 가상 메모리 주소로 최초 접근이 발생하면, 주 페이지 폴트가 발생하고 물리 메모리 할당 후 메모리 공간을 0으로 초기화한 뒤 (Demand Zero Memory)가상 메모리 주소와 물리 메모리 주소 매핑한다.[파일 기반 ..

리눅스 리다이렉션과 파이프

리다이렉션리다이렉션은 명령의 입력이나 출력을 파일이나 다른 장치로 보내거나 받을 수 있게 해주는 것출력 리다이렉션(>)// 명령어의 표준 출력을 파일로 보낸다. 파일이 이미 존재하는 경우 내용을 덮어쓴다.ls > 파일목록.txt출력 추가 리다이렉션(>>)// 명령어의 표준 출력을 파일 끝에 추가한다. 파일이 없으면 새로 추가echo "새로운 내용" >> 로그.txt입력 리다이렉션(// 파일의 내용을 명령어의 표준 입력으로 사용한다.sort 표준 오류 리다이렉션(2>)// 명령어의 표준 오류 출력을 파일로 보낸다.gcc hello.c 2> 오류.log컴파일 중 발생한 오류 메시지를 오류.log에 저장표준 출력과 표준 오류를 모두 리다이렉션 (&> 또는 파일 2>&1)명령어 &> 전체출력.log == 명령어..

캐시

지역성좋은 프로그램은 최근에 참조했던 데이터 근처의 데이터나최근에 자신을 참조했던 데이터를 참조하려는 경향이 있다.두 가지 지역성시간 지역성한 번 참조된 메모리 위치는 가까운 미래에 다시 여러 번 참조될 가능성이 높다.공간 지역성특정 메모리 위치가 참조되면, 가까운 미래에 근처의 메모리 위치를 참조할 가능성이 높다.** 운영체제 수준에서 지역성의 원리는 시스템이 메인 메미로리르 갖아 최근에 참조한 가상 주소 공간 블록에 대한 캐시로 사용될 수 있게 해준다.프로그램 데이터 참조의 지역성int sumvec(int v[N]) { int i, sum = 0; for ( i = 0 ; i sum 변수는 for문에서 반복 참조되므로 좋은 시간 지역성을 갖는다.반면 sum은 물리량이므로 공간 지역성이 ..

멀티 레벨 페이지 테이블 (OSTEP 20장)

멀티 레벨 페이지 테이블선형 페이지 테이블을 트리 구조로 표현한다.매우 효율적인 방법으로 현대 시스템에서 사용되고 있음멀티 레벨 페이지 테이블 기본 개념1. 페이지 테이블을 페이지 크기의 단위로 나눈다. 페이지 테이블의 페이지가 유효하지 않은 항목만 있으면, 해당 페이지를 할당하지 않음 2. 페이지 디렉토리라는 자료 구조를 사용하여, 페이지 테이블 각 페이지의 할당 여부와 위치 파악**선형 페이지 테이블은 배열이므로 스택이 맨 마지막에 배치 되어 중간에 불필요한 부분까지 페이지를 할당해야 함 **반면 다단계 페이지 테이블의 경우 필요한 부분에 대해서만 페이지를 할당하면 되므로, 메모리를 절약할 수 있다. (페이지 테이블을 나눠 스택과 힙 사이의 공간이 존재하지 않음)- 배열의 경우 1000번 ..

TLB

TLB (주소 변환 캐시)자주 참조되는 가상-물리 주소 변환 정보를 저장하는 하드웨어 캐시 주소 변환을 빠르게 하기 위해서 TLB를 사용한다.TLB는 칩의 메모리 관리부(MMU)의 일부이다. - 프로세싱 코어와 가까운 곳에 위치TLB를 사용하지 않는 경우1. 가상 주소 생성2. 가상 주소를 물리 주소로 변환하기 위해 메인 메모리에 있는 페이지 테이블 조회 메모리 참조 1회3. 데이터 접근 : 변환된 물리 주소를 사용하여 실제 데이터를 메모리에서 읽는다. 메모리 참조 2회 TLB를 사용하는 경우1. 가상 주소 생성2. TLB 조회 : TLB에 해당 가상 주소의 페이지 테이블 엔트리가 있는지 확인 [TLB 히트] - 페이지 테이블에 대한 메모리 접근 없이 물리 주소를 즉시 얻음 ..

가상 메모리 - 요약

가상 메모리는 한정된 물리 메모리의 한계를 극복하고, 각 프로세스가 무한한 메모리를 사용할 수 있는 것 처럼 느끼도록 시스템이 메모리를 추상화한 개념 - 각 프로세스가 자신만의 메모리 공간을 가지는 것처럼 보이도록 하여 프로세스간 격리를 수행- 실제 물리 메모리가 부족할 경우 보조 기억 장치를 활용하여 필요한 데이터를 스왑하는 방식으로 무한한 메모리를 갖는 것처럼 보임- 자주 사용하는 메모리는 물리 메모리에 놓고, 자주 사용되지 않는 데이터는 스왑 영역에 내려 물리 메모리를 효율적으로 사용가상 메모리 주소- 가상 메모리 주소는 단순 주소 범위를 뜻한다.- 64비트 시스템에서는 이론적으로 16엑사 바이트의 가상 메모리 주소 공간을 가질 수 있다.→ 현실적인 제약으로 일부 비트를 사용하지 않기도 함 ..

문맥교환

문맥교환이란운영체제 커널은 문맥 전환을 통해 멀티테스킹을 구현한다.커널은 각 프로세스마다 컨텍스트를 유지한다.컨텍스트는 커널이 선점된 프로세스를 다시 시작하기 위해 필요로 하는 상태이다. - 범용 레지스터, 프로그램 카운터, 사용자 스택, 커널 스택, 상태 레지스터, 페이지 테이블, 프로세스 테이블, 파일 테이블 같은 객체들 값들로 구성커널이 실행할 프로세스 선택 - 스케줄 했다.커널이 스케줄 한 후 현재 프로세스를 선점하는 것 - 문맥 교환 **스케줄러는 준비큐에 있는 구조체에서 프로세스 ID, 프로세스 우선순위, 프로세스 상태, PCB 포인터 정보를 가져온다.PintOS에서 PCB는 thread 구조체문맥교환이 발생하는 경우1. 하드웨어 인터럽트가 발생하는 경우 타이머 인터럽트가..

인터럽트

인터럽트프로세서가 현재 실행 중인 작업을 일시 중단하고 다른 작업을 처리해야할 때 발생하는 신호 Ex) 키보드, 마우스 입력, 시스템 콜, 페이지 폴트 등등 **** 인터럽트를 실행한다고 해서 반드시 다른 작업을 처리한 후 원래 작업으로 돌아오는 것은 아니다.Ex) 문맥교환 인터럽트의 경우 다른 프로세스로 전환됨일반적인 인터럽트 사이클1. CPU가 인터럽트 발생을 확인하고, 현재 실행 중인 작업을 중단한다.2. 실행 중인 프로세스의 PC, 스택, 일반 레지스터, 상태 레지터 등의 현재 상태를 특수 저장소에 저장일반적으로 커널 스택이나 커널 메모리 영역 또는 PCB에 저장 3. CPU의 PC에 인터럽트 처리 루틴의 시작 주소를 저장하여 인터럽트 처리 인터럽터 벡터 테이블을 참조하여 인터럽트 처리 루틴 주소..

시스템 콜

시스템 콜시스템 콜은 유저 프로그램이 커널 기능을 사용할 수 있게 해주는 인터페이스 시스템 콜은 커널 모드에서 실행되며, 작업을 마치면 유저 모드로 전환된다.유저모드 VS 커널 모드유저모드매우 제한된 환경에서 명령어 실행 가능, 메모리 영역도 제한적으로 사용 가능커널 모드어떤 명령어도 실행 가능하며, 시스템 내의 어떤 메모리 위치도 접근 가능시스템 콜의 실행 과정 - PINTOS1. 응용 프로그램이 시스템 콜이 필요한 시점에 도달EX) 파일을 열기 위해 open() 함수 호출 // 여기서 open()은 래퍼함수// 경로 - PINTOS-KAIST/lib/user/syscall.c int open(const char *file) { return syscall1(SYS_FILESIZE, fd);}2...