일단 씻고 나가자
23.04.28 본문
2023. 04. 28 금요일
- 리눅스에서 파일 권한에 대한 10자리(linux rwx) 해석?
https://gocoder.tistory.com/1793
- 리눅스에서 특정 그룹에게 권한을 주는 명령어는 무엇이며, 사용 방법?
: chmod. change mode의 합성어이다.
파일 소유자 (‘U’ser), 그룹 (‘G’roup), 그 외 사용자 (‘O’thers), 모든 사용자(‘A’ll)로 나뉘며
해당 앞 글자와 추가 (‘+’), 제거 (‘-’), 지정 (‘=’) 세 연산자와 rwx를 합쳐서 사용한다.
https://recipes4dev.tistory.com/175
- 리눅스에서 특정 파일에서 특정 문자열을 찾는 명령어? 사용 방법?
: grep 명령어를 사용한다.
grep –옵션 정규식 파일명 형식으로 사용한다.
https://coding-factory.tistory.com/802
- 리눅스 소프트 링크와 하드 링크? 사용 방법?
: 소프트 링크(soft link, symbolic link)는 바로가기 파일을 만드는 것이며, 바로가기 파일이므로 원본 파일이 지워지면 무용지물이 된다.
하드 링크(hard link)는 같은 inode의 파일을 만드는 것이며, 둘 중 하나가 삭제돼도 영향을 미치지 않고 수정 시 두 파일 모두 수정된다.
ln [-s] 원본파일 링크파일 같이 사용한다.
이때 –s는 소프트 링크를 사용할 때의 옵션이며, 없이 사용하면 하드링크로 작성된다.
https://ndb796.tistory.com/506
- 가상 메모리란? 탄생 배경? MMU란? 가상 메모리의 사용 흐름?
: Virtual Memory System. 폰 노이만 구조에 따라 모든 프로세스는 메모리 내에 올려져 있어야 하므로, 용량에 문제가 생기는 문제를 해결하기 위해 태어난 개념. 메모리가 실제 메모리보다 많아 보이게 하는 기술이다.
실제 사용하는 메모리는 순간마다 코드의 일부분, 예를 들면 32bit, 64bit만을 순간마다 접근하므로 이에 착안하여 CPU에게는 가상 주소만을 주고 가상 주소를 실제 메모리 주소로 매핑해주는 장치만 중간에 만들어두어 중간마다 물리 주소로 바꿔주기만 한다는 아이디어다.
(virtual address, physical address)
매핑을 도와주는 기능은 굉장히 빈번하므로 코드로 구현한다면 성능이 떨어져, CPU에 MMU (Memory Management Unit) 하드웨어 칩을 별도로 꽂아 사용한다.
리눅스의 경우 프로세스마다 4GB씩을 할당하는데 만약 실제 프로그램의 크기가 그것보다 작다면 남은 빈공간은 낭비된다. 따라서 프로그램의 코드를 작은 조각으로 나누어, 현재 CPU가 필요로 하는 작업에 대한 조각만 RAM(physical memory)에 올려놓고 실행한다는 흐름이다.
(요구 페이징. Demand paging)
즉, 프로그램이 프로세스화 되더라도 모든 데이터가 RAM에 올라가는 것이 아닌, 지금 CPU가 필요로 하는 데이터의 조각만 메모리에 올려놓고 해당 주소는 MMU가 찾아준다.
- 페이징 시스템이란? 페이징 시스템의 작동 순서? (페이지 테이블, 물리 메모리, 변위) CR3?
: 크기가 동일한 페이지로 나누어 가상 주소 공간과 물리 주소 공간을 관리하는 개념.
가상 메모리를 구현하는 알고리즘은 여럿이 있는데, 개중에는 같은 페이지가 아니라 의미 있는 단위의 크기로 페이지를 구성하는 알고리즘도 있다. 페이징 시스템은 그런 기준 없이 크기만으로 나눈다.
해당 시스템을 구현하려면 하드웨어의 지원이 필요하며, 리눅스에스는 4KB의 페이지로 페이징한다.
페이징 시스템을 지원하는 운영체제에서 프로세스가 생성되면 물리 메모리 어딘가에 해당 프로세스의 Page Table을 생성하고, 해당 프로세스의 PCB에 자신의 페이지 테이블 위치의 주소를 CPU 내부의 레지스터(CR3)에 기록한다. 페이지 테이블에는 각 페이지의 첫 주소와 실제 물리 주소, 그리고 실제 물리 메모리에 존재하고 있는지(‘v’alid/‘i’nvalid)의 정보가 적힌다. (존재하다 지워질 경우도 있다)
CPU가 어떠한 가상 메모리를 요구하면 MMU는 해당 프로세스 PCB 내부의 페이지 테이블 주소를 확인하고 페이지 테이블로 접근한다. 페이지 테이블에 CPU가 요구한 가상 주소가 있다면 함께 적혀 있는 물리 주소를 CPU에게 전달한다. 페이징 시스템은 요구 페이징 방식으로 CPU가 요구한 페이지가 메모리에 없을 수 있는데, 이를 페이지 폴트(Page fault)라 하며 이때는 운영체제가 CPU를 잠시 멈추고 적당한 메모리 공간에 요구했던 해당 페이지를 올린다.
페이지의 첫 주소(p)부터 요구한 주소(v)가 얼마나 떨어져 있는지를 변위(d)라고 하며, 이를 통해 요구한 주소를 첫 주소에 변위를 더하여 최종 주소를 반환한다. (가상 주소 v = (p, d))