//단일 큐 구현 -> 작업 생성-> 스케줄링 생성 -> CPU 할당?? #include #include typedef struct _queue{ char QUE[100]; char front; char rear; }Queue; void QInit(Queue * pq){ pq->front = 0; pq->rear = 0; } int QIsEmpty(Queue * pq){ if(pq->front == pq->rear) return 1; else return 0; } int NextPosIdx(int pos){ if(pos == 99) return 0; else return pos+1; } void Enqueue(Queue * pq,char data){ if(NextPosIdx(pq->rear) == pq-..
문제점 : 동기화 메모리와 캐시의 일관성 유지에 대한 모든 일을 캐시가 담당한다면, 프로그램 또는 운영체제는 공유 데이터를 접근할 때 걱정할 필요가 있을까? 있다. CPU들이 동일한 데이터에 접근할 때, 올바른 연산 결과를 보장하기 위해 락과 같은 상호 배제를 보장하는 동기화 기법이 많이 사용된다. 락-프리 데이터 구조 등의 다른 방식은 복잡할 뿐만 아니라 특별한 경우에만 사용된다. 예를 들어 여러 CPU가 사용하는 공유 큐가 있다고 가정하자. 캐시의 일관성을 보장하는 프로토콜이 존재한다 하더라도 락이 없이는 항목의 추가나 삭제가 제대로 동작하지 않을 것이다. 데이터를 갱신하기 위해서는 락이 필요하다. //리스트의 삭제 typedef struct __node_t{ int value; struct __no..
멀티프로세서란 CPU가 여러개인 프로세서를 말한다. 흔히 말하는 다중코어이다. 싱글코어 만으로는 한계가 있기 때문에 다중코어를 사용하게 된 것이다. 하지만 다중코어에는 문제가 있다. 프로그램은 하나의 CPU만 사용하기 때문에 아무리 많은 CPU를 달아도 속도적 측면에서는 변화가 없는 것이다. 이 문제를 해결하기 위해서는 프로그램을 병렬 실행이 되도록 다시 짜야 한다. 보통 쓰레드를 이용한다. 쓰레드는 나중에 자세히 설명한다고 한다. 멀티 쓰레드 응용 프로그램은 작업을 여러 CPU에 할당하여 CPU의 수가 많을수록 더 빠르게 실행되도록 한다. 여러 CPU에 작업을 어떻게 스케줄 해야 하는가? 운영체제는 어떻게 작업을 여러 CPU에 스케줄할 수 있을까? 멀티 프로세서 구조 먼저 단일CPU와 멀티CPU 하드웨..
비례 배분이란 반환 시간이나 응답 시간을 최적화하는 대신 스케줄러가 각 작업에게 CPU의 일정 비율을 보장하는 것이 목적이다. 비례 배분의 좋은 예는 추첨 스케줄링이다. 기본적인 아이디어는 다음 실행될 프로세스를 추첨을 통해 결정하는 방식이다. 더 자주 실행되어야 하는 프로세스는 당첨 기회를 더 많이 준다. 핵심적인 문제는 어떻게 CPU를 정해진 비율로 배분할 것인가이다. 추첨 스케줄링에 있어서 추첨권은 중요한 근간이 된다. 추첨권으로 프로세스는 받아야할 자원의 몫을 나타낸다. 프로세스가 소유한 추첨권의 양과 전체 추첨권의 비율로 몫을 나타낼 수 있다. 예를 들어 A는75장, B는 25장 소유하고 있다. A에게는 75%의 CPU를, B에게는 25%의 CPU를 할당한다. A가 0~74까지의 추첨권을 가지고..
멀티 레벨 피드백 큐(MLFQ)에 대해 알아보자. MLFQ가 해결하려고 하는 기본적인 문제는 두가지이다. 1.짧은 작업을 먼저 실행 시켜 반환 시간을 최적화.(SJF,STCF 같은 작업은 작업 시간을 알아야 한다는 단점.) 2.MLFQ는 I/O를 사용하는 사용자에게 응답 시간을 최적화.(RR 같은 작업은 응답 시간을 단축시키지만 반환 시간이 최악.) 우리가 프로세스에 대한 정보가 없다면 스케줄러를 어떻게 만들 수 있을까? 실행 중인 작업의 특성을 알아내고 이를 이용하여 더 나은 스케줄링 결정을 하기 위한 방법은? MLFQ의 기본 규칙 MLFQ는 여러 개의 큐로 구성되며, 각각 다른 우선순위가 배정된다. 실행 준비가 된 프로세스는 이 중 하나의 큐에 존재한다. MLFQ는 실행 순서를 위해 우선순위 사용한다..
가장 먼저 프로세스에 대하여 몇가지 가정을 할 것이다. 일련의 프로세스들이 실행하는 상황을 워크로드라고 부르기로 한다. 워크로드를 결정하는 것은 정책 개발에 매우 중요한 부분이다. 우리는 시스템에서 실행 중인 프로세스 혹은 작업에 대해 다음의 가정을 설립한다. 1.모든 작업은 같은 시간 동안 실행한다. 2.모든 작업은 동시에 도착한다. 3.각 작업은 시작되면 완료될 때까지 실행한다. 4.모든 작업은 CPU에서만 실행한다.(I/O X) 5.각 작업의 실행 시간은 사전에 알려져 있다. 가정들이 굉장히 비현실적이다. 스케줄링을 살펴보면서 가정들을 해제해 보자. 스케줄링 평가항목 1.선입선출 작업 반환 시간은 작업이 완료된 시각에서 작업이 시스템에 도착한 시간을 뺀 시간이다. 반환 시간은 성능 측면에서의 평가 ..
가상화 기법을 구현하기 위해서는 몇가지 문제를 해결해야 한다. 1.성능 저하 2.제어 문제 제한적 직접 실행 직접 실행이라는 아이디어는 말 그대로 CPU에서 직접 실행하는 것이다. 프로그램을 프로세서에 올리고 데이터와 변수,코드를 가져와 메모리에 저장하고 시작점으로 분기해 코드를 실행한다. 직접 실행 프로토콜 프로세스 목록의 항목을 생성 프로그램 메모리 할당 메모리에 프로그램 탑재 argc/argv를 위한 스택 셋업 레지스터 내용 삭제 call main() 실행 하지만 직접 실행의 문제점은 운영체제가 원하지 않는 일은 하지 않는다는 보장이 없다. 두번 째는 프로세스 실행 시, 시분할(프로세스 간 전환)을 어떻게 구현 할까 이다. 직접 연산을 CPU에서 직접 실행하기 때문에 빠르다는 장점이 있지만, 디스크..
fork() 시스템 콜 fork() 함수는 프로세스를 생성하는 함수이다. fork에 의해 생성되는 프로세스는 자식 프로세스이고, 자식 프로세스는 부모 프로세스의 메모리를 그대로 복사해 사용한다. 그리고 fork이후의 코드부터 각자의 메모리를 사용한다. #include #include #include int main(int argc,char * argv[]){ printf("hello world (pid:%d)\n",(int)getpid()); int rc = fork(); if(rc < 0){ fprintf(stderr,"fork failed\n"); exit(0); } else if(rc == 0){ printf("hello, i am child (pid) : %d\n",(int)getpid()); }..
프로세스의 개념 일반적으로 프로세스는 실행중인 프로그램으로 정의한다. 프로그램은 디스크 상에 존재하면 실행을 위한 명령어와 정적 데이터의 묶음이다. 이 명령어와 데이터 묶음을 읽고 실행하는 것이 운영체제이다. 사용자는 여러개의 프로그램을 동시에 실행하고 싶다. 게임을 켜놓고 웹 서핑을 하면서 노래를 듣는다. 동시에 수백개의 프로세스를 실행하는 것 처럼 보인다. 어떻게 하면 CPU가 여러 개 존재하는 것 처럼 제공할 수 있을까? 가상화를 사용한다. 하나의 프로세스를 실행하고, 얼마 후 중단시키고 다른 프로세스를 실행하는 작업을 반복하면서 여러 개의 CPU가 존재하는 것 처럼 보이게 한다. 시분할이라 불리는 이 기법은 원하는 수 만큼의 프로세스를 동시에 실행할 수 있게 한다. 시분할 기법은 CPU를 공유하기..
디스크를 관리하는 운영체제 소프트웨어를 파일 시스템이라 부른다. 파일 시스템은 사용자가 생성한 파일을 시스템의 디스크에 안전하고 효율적인 방식으로 저장한다. 메모리(CPU)와 달리 프로그램 별로 가상 디스크를 따로 생성하지 않는다. 아래 코드는 문자열 hello world를 포함한 파일 /tmp/file을 생성하는 코드이다. #include #include #inlcude #inlcude #include int main(int argc,char * argv[]){ int fd = open("/tmp/file",O-WRONLY | O_CREAT | O_TRUNC, S_IRWXU); assert(fd > -1); int rc = write(fd, "hello world\n",13); assert(rc == ..
- Total
- Today
- Yesterday
- SVM
- 차량 네트워크
- AVB
- 크로스 엔트로피
- automotive ethernet
- HTML
- CAN-FD
- Python
- many-to-many
- 이상탐지
- problem statement
- many-to-one
- porks
- AE
- one-to-many
- AVTP
- 로지스틱회귀
- PCA
- 딥러닝
- json2html
- 회귀
- SOME/IP
- Ethernet
- 논문 잘 쓰는법
- 차량용 이더넷
- 단순선형회귀
- 머신러닝
- 케라스
- cuckoo
- automotive
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |