목록Linux (12)
뚝딱뚝딱 블로그

캐시 메모리CPU 동작을 단순히 표현하면 다음과 같은 동작의 반복이다.1. 명령을 읽고 명령 내용에 따라 메모리에서 레지스터로 데이터를 읽음2. 레지스터에 있는 데이터를 가지고 계산3. 계산 결과를 메모리에 다시 저장 레지스터에서 처리하는 계산 시간에 비하면 메모리 접근 속도는 매우 느림. 예를 들어 레지스터 계산이 1회당 약 1 나노초 미만일때, 메모리 접근은 1회당 수십 나노초가 걸린다. 위의 처리 2번이 아무리 빠르더라도 1, 3번 메모리 read/write에서 병목 현상이 일어나서 전체 처리 속도가 느려지는 것이다.해당 문제를 해결하기 방법으로 캐시 메모리가 있다. 일반적으로 캐시 메모리는 CPU 내부에 존재하는 고속 기억장치이다. 캐시 메모리에 접근하는 속도는 일반 메모리에 접근하는 속도에 비해..
대부분의 저장 장치는 파일 시스템을 통해 접근한다.파일 시스템이 없다면? 데이터를 디스크 어떤 위치에 저장할지 직접 정해야하고, 다른 데이터를 훼손하지 않도록 영역 관리, 나중에 다시 읽어오기 위한 위치, 사이즈, 배치등을 기억해야한다.파일 시스템은 이러한 정보들을 대신해서 관리해준다.아래와 같이 사용자가 발표자료 0 - 10GiB의 데이터를 요청했다고 가정하자.사용자 모드커널 모드하드웨어프로세스(발표 자료 10기가 데이터 요청, 시스템 콜 호출)파일 시스템 코드(하드웨어 저장 장치 검색, 읽기, 사용자에게 넘기기)발표 자료 관련 data 저장되어 있음파일 형식으로 데이터를 관리하는 저장 장치의 영역(관리 영역) + 저장 영역을 다루는 처리(파일 시스템 코드) 양쪽을 합쳐서 파일 시스템이라고 부른다. 리..

프로세스가 장치 접근을 직접 하지 못하는 이유여러 프로그램이 동시에 장치를 조작한다면, 예상할 수 없는 방식으로 작동할 위험성이 있다.원래라면 접근해서는 안되는 데이터를 훼손하거나 훔쳐 볼 위험성이 있다.따라서 프로세스 대신해서 커널이 장치에 접근하는데, 다음과 같은 인터페이스를 사용한다.디바이스 파일이라는 특수한 파일을 조작한다.블록 장치에 구축한 파일 시스템을 조작한다.네트워크 인터페이스 카드는 속도 등의 문제로 디바이스 파일을 사용하는 대신에 소켓 구조를 사용한다.디바이스 파일디바이스 파일은 장치마다 존재한다. 예를 들어 저장 장치라면 /dev/sda나 /dev/sdb 같은 파일이 디바이스 파일이다. 리눅스는 프로세스가 디바이스 파일을 조작하면 커널 내부의 Device driver라고 부르는 소프트..
빠른 프로세스 작성 처리 fork() 함수 고속화: 카피 온 라이트fork() 함수를 호출할 때 부모 프로세스의 메모리를 자식 프로세스에 모두 복사하는 것이 아니라, 페이지 테이블만 복사한다. 페이지 테이블 엔트리 내부에는 페이지에 쓰기 권한을 관리하는 필드가 있는데 이때 부모와 자식 양쪽을 대상으로 모든 페이지에 쓰기 권한을 무효화 한다. 부모 프로세스의 페이지 테이블가상 주소물리 주소쓰기 권한0 - 100500 - 600X100 - 200600 - 700X 자식 프로세스의 페이지 테이블가상 주소물리 주소쓰기 권한0 - 100500 - 600X100 - 200600 - 700X 이후, 메모리를 읽을 때 부모와 자식 사이에 공유된 물리 페이지에 접근 가능하다. 그러다 둘 중 하나가 data를 갱신하려고 ..
메모리 관리 정보 수집하기시스템에 설치된 메모리 용량, 사용 중인 메모리 용량은 free 명령어로 확인이 가능하다.$ free total used free shared buff/cache availableMem: 7729028 1552460 4177240 536648 1999328 5375580Swap: 0 0 0free 명령어를 통해 얻은 정보는 아래와 같다.필드명의미total시스템에 설치된 전체 메모리 용량.free명목상 비어 있는 메모리(자세한 건 available 참고)buff/cache버퍼, 캐시, 페이지 캐시가 이용하는 메모리. 시스템의..
프로세스 스케줄러리눅스 커널에서 프로세스에 CPU 자원할당을 담당한다.하나의 논리 CPU는 동시에 하나의 프로세스만 처리한다.실행 가능한 여러 프로세스가 타임슬라이스 단위로 순서대로 CPU를 사용한다.논리 CPUprocess0 동작process1 동작process2 동작process0 동작..경과시간 사용시간경과시간이란? 프로세스 시작 ~ 종료까지 경과된 시간.사용시간이란? 프로세스가 실제로 논리 CPU를 사용한 시간.time 명령어를 통해 프로세스 경과시간, 사용시간을 알 수 있다. 아래와 같이 사용time ./doSomething.pyreal 0m2.357suser 0m2.357ssys 0m0.000s 여기서 real -> 경과 시간, user + sys 는 사용시간이다. user는 사용자 공간에서 ..

프로세스 생성 새로운 프로세스를 생성하는 목적은 무엇일까?목적 1. 동일한 프로그램 처리를 여러 프로세스에 나눠서 처리하기 ex) 웹서버에서 다수의 요청 받기목적 2. 다른 프로그램을 생성하기 ex) bash에서 각종 프로그램을 새로 생성프로세스 생성을 실제로 실행하는 방법으로 리눅스는 fork(), execve() 함수를 사용한다. 내부적으로는 각각 clone(), execve() 시스템 콜을 호출한다.목적 1이라면 fork()만 사용, 목적 2라면 fork(), execve() 둘 다 사용한다. 같은 프로세스를 두 개를 분열시키는 fork() 함수부모 프로세스가 fork() 함수 호출커널이 부모 프로세스 메모리를 자식 프로세스 쪽에 복사1) 부모 프로세스가 fork()에서 복귀2) 자식 프로세스가 f..
프로그램과 프로세스프로그램 - 컴퓨터에서 동작하는 관련된 명령 및 데이터를 하나로 묶은 것 ex) executable file, 소스 코드(script 언어 케이스), kernel프로세스 - 실행되어서 동작 중인 프로그램을 프로세스라고 함.커널이 왜 필요한가프로세스간에 data를 write 한다고 가정해보자. 서로 다른 프로세스가 같은 저장장치에 직접 읽고/쓰기를 한다면 커널이 없다면 data가 손상될 수 있을 것이다.(다른 프로세스들의 동작이나 순서를 알 수 없으니)접근 불가능이어야할 프로그램이 장치에 접근 가능할수도 있음.이런문제를 해결하기 위해, 하드웨어의 도움을 받아 커널은 프로세스가 직접 장치에 접근할 수 없도록 하고있다. 구제척으로는 CPU에 내장된 mode 기능을 사용한다.mode란?PC나..