반응형

전체 글 216

[ OS ] Address Spaces

1. Address Spaces 1.1 Multiprogramming and Time Sharing Multiplrogramming - 여러개의 프로세스들이 동시에 메모리에 적제되어 실행되는 프로그램 하나 끝나고 하나 실행 시키려면 메모리를 넘겨주기 전에 실행중인 프로세스의 메모리를 저장하고 넘겨줘야한다. 이는 속도 저하를 일으킨다. 하지만 Multiplrogramming을 하면 context swich 를 할 필요가 없다. 하지만 마냥 위 방법이 효율적인 것은 아니다. 크기가 다 똑같게 지정되어있어 모자를 때도 남을 때도 있다. 또, 이는 프로세스 간의 메모리 접근을 막아야한다. 1.1 Address space 우리가 주소 공간을 정의하여 가상주소를 사용하면 메모리 추상화가 쉽고, 프로그램 입장에서 어..

[ OS ] Multiprocessor Scheduling

1. Multiprocessor Scheduling 이 챕터에서는 코어가 여러개일 때 스케줄링하는 방법에 대한 이야기이다. 1.1 Multiprocessor Architecture 코어는 각각 캐시를 가지고 있으며 공통된 캐시를 가지고 있다. 대부분의 노트북과 컴퓨터는 위와같은 구조를 보인다. 각 CPU는 멀리있는 Memory도 사용 가능하다. 1.2. Single-queue multiprocessor scheduling (SQMS) 이 방법은 CPU가 여러개더라도 하나의 Queue로 운영하는 방법이다. 큐에서 job을 꺼낼때는 코어의 개수만큼 한번에 꺼내서 쓸 수 있다. A를 계속 실행하는데 CPU 를 옮겨다니므로 처리해야할 부분이 늘어난다. 그렇게 되면 동기화 오버해드가 일어날 수도 있다. 1.3. ..

[ OS ] Multi-Level Feedback Queue

1. Multi-Level Feedback Queue 1.1 Scheduling Metrics Turnaround time - 일반적인 작업 실행시간을 알 수 없으므로 Turnaround에 효율적인 SJF와 STCF은 사용하기 힘들다 response time- OS는 사용자에게 반응하는 것처럼 느끼게 하는 것을 좋아한다. RR은 응답시간을 줄이지만 Turnaround 시간에서는 되게 별로다. 어떻게 하면 작업기간에 대한 사전지식 없이 Turnaround time와 response time 모두 효율적인 스케줄러를 설계할 수 있을까? 1.2 Multi-Level Feedback Queue Rule1, Rule2 MLFQ 알고리즘은 기본적인 조건을 가지고있다. 먼저 여러개의 큐를 가지고 있고 이는 각각 다른..

[ OS ] 3. CPU Scheduling

1. CPU Scheduling 이제는 운영체제가 어떤 기준과 정책으로 스케줄링을 진행하는지에 대하여 이야기 해볼 것이다. 여러가지 정책을 공부하기위해 가정을 세워두고 조금씩 바꿔가며 설명할 것이다. 1.1 Turnaround time Turnaround time = job이 생성된 시간 - 종료된 시간 (완성되는데 얼마나 걸렸냐) Response time = job 이 도착한 시간 - 실행하기 시작한 시간 (얼마나 기다리게 했냐) 1.2 First In, First Out (FIFO) 각 작업은 동일한 시간동안 실행된다 모든 작업은 동시에 도착한다 일단 시작이 되면, 각 작업이 완료될때까지 실행된다 모든 작업은 CPU만 사용한다. 각 작업의 실행시간을 알 수 있다. 위의 목록들을 가정하고 FIFO 정책..

[ OS ] 2. Limited Direct Execution

1. Limited Direct Execution 저번 강의에서는 가상 cpu를 만들어서 할당해주는 내용을 공부했다. 이번에는 어떻게 하면 성능을 유지하고 접근성을 잘 지키며 CPU 가상화를 구현할까에 대해 공부한다. 1.1 Direct Execution 실행중인 프로그램에 대한 제한이 없다면 OS는 가 아무것도 제어할 수 없다. 이는 즉 프로세스가 CPU를 독점하고 있으면 OS가 끼어들 틈이 없다는 의미이다. OS가 프로그램을 적으로 실행하며 우리가 원하는 방향으로 흘러가려면 제한된 작업을 하게 해야하고 시간을 나눠쓰게 해야한다.(독점 X) 2. Problem #1: Restricted Operations 제한된 작업을 실행하게 하려면 I/O 작업을 해서 disk에 접근하려고 할 때나 CPU가 더 많은..

[ OS ] 1. Processes

1. Program vs Process 1.1 program - 컴파일하고 생긴 exe 파일, 디스크에 있는 여러 명령 및 정적데이터 1.2 process - 실행중인 프로그램 - 기계의 상태 (레지스터, 메모리, 열려있는 파일 목록 ) - 프로그램 하나를 여러번 실행하면 여러 프로세스 생성 2. Virtualization 이상은 서로 양보하며 잘 나눠쓰면 좋지만 현실은 독점하려고 한다. 운영체제는 virtualization을 통해 이상을 실현하려고한다. 가장 대표정은 방법은 Time sharing 이 있다. 2.1 Time sharing - 실제로 물리적 CPU가 하나또는 몇개뿐일 때 가상 CPU가 존재한다는 착각을 하게 됨 - 사용자가 원하는 만큼 많이 동시에 프로세스를 실행시킬 수 있다. - 기회비..

[ WEB ] HTML 기본 태그

기본적인 내용 기본 태그 텍스트 표시 모든 텍스트가 하나의 연결된 문단으로 표시된다. 단락, 위 아래에 엔터 추가 사용자가 입력한 그대로 화면에 표시 1부터 6까지 있음 1이 가장 큰 글씨 , 제목느낌 두꺼운 글씨 이탤릭체로 만든다 텍스트를 강하게 표시 텍스트 강조 텝스트가 코드임을 표시 위첨자 아래첨자 순서 없는 리스트 순서 있는 리스트 링크 넣기 주의해야할점 코드에서 엔터키를 눌러도 웹브라우저에서 표시 X 태그 활용 1. 썸네일 1. 표 표 제목 표 제목 표 내용 2개의 행 통합 2개의 열 통합

[ C++ ] #5397 ( 키로커 )

문제는 그렇게 어렵다고 생각하지 않았지만 리스트를 정의하지 않고 선언한 뒤 리스트의 처음을 가르키는 iterator를 생성하면 어디를 가르킬까?에 대한 의문때문에 내가 답을 납득하는데에 시간이 걸렸다. 결론은 null을 가르킨다는 것이었다. 나는 list L; 이렇게 선언을 했지만 답을 보니 list L={ }; 로 선언을 했다. 나처럼 해도 오답은 아니지만 답 코드를 보니 null이 들어있는 한칸이 만들어지는 것이 아닐까? 하는 발상이 떠올랐다. 그렇게 계산해보고 예제를 넣고 풀어보니 논리가 맞았다. 앞으로 그렇게 생각해야지... #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(nullptr); int fre; ci..

BOJ/[ BOJ ] C++ 2022.02.27

[ C++ ] #3273 ( 두 수의 합 )

한번 동적할당을 하고 이중 포문을 이용해서 코드를 짰는데 시간초과가 났다.. 그래서 두번 공적할당을 하고 합을 구하는 과정에서 시간복잡도를 줄였다.. #include #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(nullptr); int num ; int* arr; cin >> num; arr = new int[num]; for (int i = 0; i > arr[i]; int sum=10,fre=0; cin >> sum; int* N = new int[sum+1]; for (int i = 0; i < sum+1; i++) N[i] = 0; for (int i = 0; i < num; ..

BOJ/[ BOJ ] C++ 2022.02.21
반응형