운영체제 11

운체 궁금했던거

일반적으로 프로세스의 페이지 테이블 정보는 커널 스택에 직접 저장되지는 않습니다. 커널 스택은 각 프로세스마다 독립적으로 할당되는 것이 아니라, 커널 전체에서 공유되는 메모리 공간이기 때문입니다. kernel 스택에 프로세스 switching 시에 저장되는 정보는 뭐야? 프로세스 스위칭 시에는 커널 스택(kernel stack)에도 일부 정보가 저장됩니다. 이 정보는 주로 인터럽트나 예외 처리 시에 필요한 정보들입니다. 보통 커널 스택에 저장되는 정보에는 다음과 같은 것들이 있습니다. 인터럽트 또는 예외 처리 시에 저장되는 레지스터 값: 인터럽트나 예외가 발생하면 커널 모드로 전환되고, 해당 인터럽트 또는 예외를 처리하는 인터럽트 핸들러(interrupt handler)가 실행됩니다. 이때 현재 실행 중..

운영체제 2023.03.26

운영체제 segmentation, free space

segmentation이란 mmu에서 base, bound 를 활용해서 가상메모리에서 물리적 주소로 변환할 때에 사용한다. 그런데 이때에 충돌을 경계해서 메모리의 구역을 나누는 것이 segmentation이다. 예를 들어서 메모리에 code, heap, stack 을 할당해야 할 때에 전체 메모리를 4등분을 해야한다. 3개인데 4등분을 하는 이유는 2의 제곱으로 나누어야 하기 때문이다. 따라서 4등분을 위해서는 2개의 bit를 필요로 하는데, 그렇기에 16kb 메모리의 가상주소의 14bit 중의 앞의 2비트는 segment 를 나타내는 수로 사용되고 뒤의 나머지 12bit 는 base 주소로 부터 떨어진 offset을 나타낸다. 아래의 그림에서의 segement 는 code 는 00 , heap 은 01..

운영체제 2023.03.15

운영체제 adress translation

protection을 위해서는 1. mmu (하드웨어에서 처리) 2. dual mode (안전을 위해 kernel 에 접근할 수 있는 모드와 아닌 모드를 나눈다.) mmu 는 가상의 주소를 물리적 주소로 바꾸어 주는 역할을 한다. 이러한 작용으로 프로그래머들 에게 메모리를 독점하는 듯한 착각을 들게 한다. 이를 학습하기 전에, 우선 모든 메모리가 연속적이라고 가정한다. virtual memory space 도 물리적 memory 보다 작다고 가정한다. 모든 process가 가지는 주소 공간이 같다고 가정한다. 가상주소를 물리적 주소로 바꿀 때에 있어서는 base 값을 더해준다. 그리고 그 값이 bound 를 넘는지를 체크한다. 따라서 mmu에서는 base 와 bound 를 가져야 한다. 그리고 이는 프로..

운영체제 2023.03.12

운영체제 address space

메모리에는 여러 프로세스의 정보들이 저장된다. 이때에, 여러 프로세스들은 가상 주소를 가진다는 것을 앞서서 알아 보았다. 예를 들어 같은 코드의 프로세스를 두개를 동시에 실행하였을 때에 같은 주소를 공유하는 경우가 있었다. 하지만, 실제로는 둘 다 다른 주소의 메모리를 사용한다는 것이다. 그리고 cpu와 저장되어있는 코드들, 메모리에도 가상주소를 기준으로 저장되어있다. 따라서 우리는 우리가 가지고 있는 가상메모리 주소를 실제의 물리주소로 바꾸어 주어야 한다. 따라서 이를 수행해주는 곳이 바로 mmu 이다. 이 mmu 의 목표는 투명해야 하여, 빨라야 하고 메모리 들은 서로 나누어져 고립되어 있어야 한다. 여기서의 투명의 의미는 바로 뒤의 실행 되는 것이 보인다는 것이다. 예를 들어서 우리가 프로그램을 작..

운영체제 2023.03.12

운영체제 scheduling proportional share

앞에서 살펴본 mlfq 같은 경우에는 performance 와 fair 중에서 perfomance 에 집중한다고 할 수 있다. 이번에는 fair에 집중해 보자, fair인 공정함에 초점을 맞춘 proportional share 비례배분이 있다. 이는 비율을 지켜서 그에 따라서 cpu 를 실행하는 것인데, 그러한 스케줄의 예로는 lottery scheduling 이 있다. 이는 각각의 프로세스에 ticket 을 배부한 후에 랜덤으로 수를 뽑아서 그 티켓을 가지고 있는 프로세스를 실행하는 방법이다. 이때, 티켓을 배부 할 때에, 비율에 맞추어서 티켓의 개수를 정해서 배부한다. 이 lottery scheduling 에는 여러 메커니즘이 있는데, 1. ticket currency - 프로세스 안에서 지역 화폐를..

운영체제 2023.03.12

운영체제 MLFQ

MLFQ 는 multi level feedback queue 로, 앞서 말한 stcf 는 반환시간이 가장 최적화된 스케줄링인데, 이는 현실적으로는 불가능하다. 그 이유는 stcf 의 경우에는 남아있는 시간을 판별해야 하는데, 이는 미래를 보아야 하기 때문에 불가능 하다. 그리고 stcf 의 경우는 반응시간이 길고 반대로 round robin 의 경우는 반환시간이 길다. 따라서 이 둘의 이점을 둘 다 가지는 mlfq 를 만들려고 한다. mlfq 는 높은 우선순위의 프로세스를 먼저 시행하는 스케줄링이다. 그리고 우선순위를 계속 내리기 때문에 규칙을 정해 보도록 한다. 따라서 규칙 1. 높은 우선순위를 시행한다. 2. 우선순위가 같으면 round robin 으로 공정하게 시행한다. 3. 일단 처음의 시행은 가..

운영체제 2023.03.11

운영체제 schedule intro

지금 까지 low-level 의 mechanism 인 switch 를 알아보았다. 이는 하드웨어에서 일어나는 일인데, 이제 소프트웨어 에서 일어나는, policy를 알아보자 policy 는 switch 를 할때 무엇을 switch 할지를 정해 주는 방법이라고 할 수 있다. 이 policy에는 scheduling 이 있는데, 이 스케줄링은 보통 두가지로 평가를 한다. 1. performance 2. fair 이 두가지에서 우리는 성능 (performance)에 대해서 알아보자. 성능의 지표로는 turnaround time이 있다. turnaround time 은 끝난 시간에서 프로세스가 도착한 시간을 빼면 된다. 맨 처음의 스케줄링은 fifo 이다. 이는 선입선출로 먼저 도착한 프로세스를 먼저 처리하는 방..

운영체제 2023.03.11

운영체제 LDE

LDE 는 limited direct execution 이다. 우선 direct execution은 프로그램을 cpu 위에서 바로 실행하는 것이다. 이때에는 바로 실행한다는 점에서 실행이 빠르다는 장점이 있을 수 있는데, 이때에는 문제가 발생한다. 1. 제한된 작동을 하기에는 불편하다. 왜냐하면 하나의 cpu 에서 실행하면 I/O 처리 등을 할때에 원래 있던 register 값을 비워야 하기 떄문에 불가능 하다. 따라서 kernal mode 와 user mode 를 두어서 kernal 에서는 system 적인 예를 들어 I/O 처리와 같은 일을 하게 되고, user mode 에서는 프로세스를 실행하게 된다. 이 두 mode 를 오갈떄에 이벤트가 필요한데, kernal에서 user 로 갈떄에는 return..

운영체제 2023.03.11

운영체제 process api

1. fork() 새로운 프로세스를 생성할 때 사용한다. fork() 가 사용되면 새로운 프로세스가 복사되어 실행되고, main() 함수부터 시작되는 것이 아닌, fork() 부터 시작된다. 그리고 위처럼 조건문을 활용해서 프로세스 별로 다른 작업을 수행하도록 할 수 있다. 그 이유는 fork()의 반환값은 새로 생성된 프로세스의 pid 값이다. 그리고 생성된 새로운 프로세스의 경우는 rc 값이 0이 된다. 2. wait() 자식 프로세스가 동작 중이면 끝날 때 까지 기다린다. 그 반환값은 성공시에는 자식 프로세스의 pid 값을 반환한다. 실패시에는 -1을 반환한다. 주어지는 인자 값으로는 주소값이 들어가는데, 그 인자의 주소에는 자식 프로세스의 리턴값이 들어간다. 3. exec() fork를 사용해서 ..

운영체제 2023.03.11

운영체제 process

우리가 사용하는 cpu는 제한적인데, 프로세스를 여러개 실행 시킬 필요들이 존재한다. 따라서 cpu 가상화를 통해서 프로세스를 여러개를 실행시키고, 프로세스 하나가 자신이 cpu 하나를 독점하는것처럼 착각하게 만든다. 그 방법으로는 time sharing을 통해서 하나 실행할때 하나는 쉬는 형식ㅇ로 번갈아 가면서 실행하는 방식이다. 우선 프로세스란 os에서 프로그램을 실행 시킬때의 추상적인 개념이다. 프로세스의 추출을 다루기 위해서는 기계적인 측면을 먼저 알아보아야 한다. 프로그램의 중요한 파트는 무엇일까?? 우선 메모리는 분명하다. 명령어 들이 메모리에 쓰여 있기 때문이다. 또한 레지스터도 포함된다. cpu에서 연산을 할 때에 필요로 하기 때문이다. 그리고 레지스터에는 특별한 레지스터 가 있다. 예를 ..

운영체제 2023.03.11