전체 글 155

운영체제 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

운영체제 Intro

운영체제의 intro를 작성하려고 한다. 먼저 os 운영체제의 주요한 기능은 가상화 이다. 여기서 가상화란 제공된 자원들을 가지고 조금 더 강력하고, 사용하기 쉽도록 변환하는 것이다. 이러한 가상화에 대해서 알아보자 1. 가상화 - cpu 가상화 먼저 위와 같은 코드가 있다고 가정하자, 이 프로그램은 변수가 입력되면, 그것을 무한히 출력시키는 프로그램이다. 이를 실핼시키면 아래와 같이 나오게 된다. 이는 실행 파일을 만들어서 실행시킨 것이다. 하지만 이를 조금 변형해서 백그라운드에서 실행시킨다면 아래와 같이 실행된다. 이를 보면 pi(process id) 가 총 4개가 나온것을 알 수 있는데, 이는 프로세스가 4개임을 알 수 있다. 그런데 cpu 하나에서 하나의 프로세스를 실행시킨다고 한다면 4개의 cp..

운영체제 2023.03.05

boj 1275

세그먼트 트리 구간 합 문제 이다. 이때에 update 방식이 두개가 존재하는데, 하나는 해당 인덱스로 찾아가면서 차이를 더 해 주는 것과 바꾸어야 하는 곳의 값을 바꾼후에 다시 더해주면서 올라 오는 방식이다. 둘이 비슷 해 보이지만 ,전자의 경우에는 맨 처음 입력을 받는 배열을 long long 으로 바꾸어야 한다. 그 이유는 차이를 계산할 때에 있어서 그 값이 long long 의 범위에 있을 경우가 있는데 ,이를 위해서 long long 으로 선언 해야 한다. 하지만, 후자의 경우에는 그냥 int 로 선언해되 괜찮다. 1. #include #include using namespace std; int N, Q; long long *tree; long long arr[100001]; long long ..

카테고리 없음 2023.02.28

spring-boot docker error : table doesn't exist

docker-compose를 활용하여 mysql과 spring 을 동시에 빌드하고 실행할 때에 문제가 발생하였다. 테이블이 조회되지 않는다는 error 였는데, properties에 table 자동 생성이 있음에도 error 가 발생하였다. 따라서 최초의 mysql니 생성된 후에 바뀌지 않는것 같아서 mysql restart 조건을 바꾸어 주었더니 error 발생없이 실행되었다. 바꾸기 전 수정 후

카테고리 없음 2023.02.15