목록운영체제 (30)
내 잡다한 노트
시스템 콜 처리 과정은 소프트웨어 시스템에서 사용자 프로그램이 OS와 상호작용하여 특정 작업을 수행하는 과정이다. 운영체제에서 제공하는 서비스에 접근할 때 사용되며, 일반적으로 하드웨어 자원에 접근하거나 메모리 관리, 프로세스 관리 등의 운영 체제 기능을 수행하는 데 사용된다. 시스템 콜 처리 과정 1. 사용자 프로그램에서 시스템 콜 함수 호출 호출한다. 시스템 콜 함수는 보통 C 라이브러리 함수 형태로 제공되며, 시스템 콜 번호와 인자 값을 인자로 받는다. 2. 사용자 모드에서 커널 모드로 전환 CPU는 현재 실행 중인 사용자 모드에서 커널 모드로 전환된다. 이 과정에서 CPU는 특권 명령어(Privileged instruction)를 사용하여 운영 체제에게 제어권을 넘긴다. 3. 시스템 콜 번호와 인..
fork() 부모 프로세스가 자식 프로세스를 만드는 시스템 콜. 자식 프로세스는 부모 프로세스의 데이터를 모두 복사해서 가지고 있는다. fork가 실행된 이후부터 자식 프로세스는 실행을 하게 된다. 리턴값으로 pid가 나오는데 이때 0이면 자식프로세스이고 0보다 크다면 부모 프로세스이다. 헤더 파일은 함수 원형 : pid_t fork(void) // pid도 pid_t로 선언해야함. exec () 이 시스템콜을 호출한 현재 프로세스 공간의 TEXT, DATA, BSS 영역을 새로운 프로세스의 이미지로 덮어씌운다. 별도의 프로세스 공간을 만들지 않는다. 이 말이 뭐냐면 프로세스 안에서 exec() 실행을 하면 새로운 프로세스를 만드는게 아니라 현재 만들어진 exec 인자에 들어가 존재하는 프로그램 실행 파..
CPU에 있는 캐시는 메모리에서 데이터를 가져와 옳게 가져오면 캐시 히트, 맞지 않는 것을 가져오면 캐시 미스를 한다.캐시도 가상메모리처럼 매핑하는 기법이 비슷하다. 그러나 캐시는 메모리보다 작기 때문에 항상 메모리의 일부 페이지만 가지고 있다. 그래서 의미하는 바가 다르다. 캐시 직접 매핑 직접 매핑에서는 메모리의 페이지 수 N을 캐시의 페이지 수 M으로 나누고 이를 블록이라고 한다. 메모리의 페이지 수 N = M * 블록의 수가 된다. 직접 매핑에서는 메모리의 블록이 캐시로 올라올 때 항상 같은 위치로 올라온다. 블록의 첫 번째 페이지는 캐시의 첫 번째 페이지에만 올라오게 된다. 일정 위치에서 올라오기 때문에 메모리의 어떤 블록에서 올라오는지만 알면 된다. 그 블록 번호를 태그라고 한다. 장점은 메모..
메모리 접근 권한 메모리의 특정 번지의 데이터를 사용할 수 있는지에 관한 권한을 뜻한다. 읽기 쓰기 추가 실행이라는 4가지 권한이 존재한다. 쓰기 권한이 없으면 추가 권한도 없기 때문에 총 8가지의 권한이 있다 디테일하게 생각하면 6가지이다. 프로세스 구역내 메모리 접근 권한 코드 영역에선 읽기 실행만 된다. 자기 자신의 코드를 프로세스는 수정할 수 없기 때문이다. 데이터 영역은 읽고 쓸수있다. 하지만 상수 데이터는 쓸 수 없다. 메모리 접근 권한에 대한 검사는 가상 주소에서 물리주소로 변환을 할 때 매번 일어난다. 만약 권한이 없는데 접근한다면 트랩 오류를 일으킨다. 세그먼테이션-페이징 혼용 기법 말그대로 세그먼테이션과 페이징의 장점을 혼합했다. 프로세스들은 어떤 데이터에 대해 어떤 권한을 가지고 있는..
가변 분할 방식과 비슷한 기법이다. 프로세스마다 사용하는 메모리 크기가 다르다. 물리 주소나 가상 주소나 각각의 공간을 세그먼트라고 부른다. 이 기법도 테이블이 존재한다. 테이블은 2열로 돼있고 1열은 사용할 수 있는 크기로 limit라고 부른다. 2열은 물리 메모리상의 시작 주소이다. 이 기법도 물리 메모리의 공간이 부족하면 스왑영역을 활용한다. 세그먼테이션의 주소 변환 VA = 로 표현한다. S는 세그먼트 번호, D는 distance이다. 프로세스 a의 32번지에 접근할 때 주소 변환 과정이다. a는 세그먼트 0번과 매핑됐다고 가정한다. VA = 이다. 시작주소는 120일 때, 물리 메모리의 120 + 32 번의 데이터를 구한다. 이때, 메모리 관리자는 거리가 세그먼트의 크기보다 큰지 확인을 한다. ..
페이징 기법이란 물리 메모리에서 고정 분할 방식과 비슷하다. 메모리의 크기를 고정적으로 사용한다 그러다보니 관리가 수월하다. 가상 주소의 분할된 각 영역을 페이지라고 하고 물리 주소의 분할된 각 영역을 프레임이라고 부른다. 둘 다 번호를 매겨 관리한다. 또한 각각의 페이지와 프레임은 크기가 같다. 페이징 매핑 테이블 페이징 기법에서 사용하는 매핑 테이블이다. 여러 할당 기법에 따라 다르지만 보통 프레임 번호가 담긴다. 프레임 번호가 아닌 invalid가 적혀 있다면 그것은 해당 페이지가 스왑 영역에 있다는 것이다. 페이징 기법의 주소 변환 가상 주소는 0번 주소부터 시작한다 페이지의 크기를 20이라고 가정할 때, 45번 주소는 3번 페이지에 있고 3번 페이지는 프레임 5번과 매핑됐을 때 프레임 5번은 1..
여러개의 프로세스를 사용할 때 메모리를 할당하는 방식이 존재한다. 바로 가변 분할 방식과 고정분할 방식이다. 가변 분할 방식은 프로세스를 한 덩어리처럼 프로세스의 크기대로 할당하는 방식으로 연속적이다. 프로세스마다 크기가 다르다보니 사용하던 프로세스가 종료가 돼 메모리에서 나갔을 때, 그 남은 공간보다 다음에 들어온 프로세스가 더 크다면 메모리에 들어가지 못하게 되고 그 남은 공간은 낭비가 된다. 이것을 외부 단편화라고 한다. 이 외부 단편화를 해결하기 위해선 조각 모음을 통해 사용중이던 프로세스를 잠시 중단하고 앞으로 이동시켜 남은 공간을 없애준다. 이런 외부단편화같은 것때문에 메모리를 관리하는게 복잡하다 조각모음처럼 부가적인 작업이 필요하기 때문에 조각 모음 말고도 외부 단편화 문제를 해결하기 위한 ..
메모리 오버레이 overlay 겹겹이 쌓는다는 뜻을 가졌다. 메모리는 하드디스크처럼 큰 용량을 가지지 못한다. 가지게 하려면 비싸기 때문에. 메모리보다 큰 프로세스를 실행하려한다면 메모리에 다 안들어가서 실행이 안될 것이다. 그걸 방지하기 위해 프로세스를 쪼개서 메모리에 넣는 것을 메모리 오버레이라고 한다. 겹겹이 쌓는다는 overlay를 사용한 이유는 프로세스를 잘라 겹겹이 쌓아서 사용하니까 그런듯. 프로그램을 몇 개의 모듈로 나누고 필요할 때마다 모듈을 메모리에 가져와서 사용한다. 어떤 모듈을 가져오거나 내보낼지는 프로그램 카운터가 결정한다. 메모리 오버레이 덕분에 프로그램의 일부분만으로도 실행이 가능해진다. 스왑 메모리 공간이 꽉차서 사용을 잠시 안하는 프로세스는 계속 메모리에 남아있게 되면 메모리..