2021. 2. 23. 18:57ㆍComputer(인강)/운영체제
안녕하세요 bannavi입니다^ㅅ^
오늘은 그동안 배웠던 프로세스를 총 정리해보고
프로그램 성능 개선 방법을 이해해보는 시간을 가져볼게요
바로 시작하겠습니다 고고!
0.05초가 지나면
그럼 이제 여기에 있는 이 코드를 CPU에서 실행하게 되는것이죠
이 라이브러리에 open함수를 열어서 어셈블리어나 기계어를 들여다 보면,
결과적으로 어떤 코드가 들어가 있느냐,
이렇게 인터럽트를 일으켜주는 것이죠.
그러면 open()이라는 함수가,
int에 의해서 사용자모드를 커널모드로 바꿔주고,
OS가 처음 부팅될 때 만들어진 IDT에서 0x80에 해당하는 주소(함수)를 찾아서 실행해주고,
그 이후 system_call()함수에서 eax로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템콜 함수로 이동하게 됩니다.
[5],[6],[7]을 수행해야 하는데(다음 단계로 넘어가기 위해서)
사실상 저장매체를 처리하는것은 레지스터를 처리하는것과는 달리 굉장히 시간이 많이 걸립니다.
그래서 그동안 CPU가 다음 코드로 넘어갈수가 없습니다.
또 결과적으로 open()이라는 함수가
커널 안에있는 sys_open()함수를 실행하게 되면
이 프로세스는 wait로 다시 넘어가게 됩니다.
그후,
DMA가 데이터를 받아와서 나이제 다 처리가 됐다 라고 CPU에 알려주면
이때 마찬가지로 interrupt가 발생하고
또 이 과정을 반복하면서
인터럽트 번호에 맞는 커널 함수를 실행하게되고,
그 함수가 하는 역할은 결과적으로 wait에 있는 process를 ready상태로 바꿔주게 되는거겠죠.
그 후, timer interrupt가 또 정책에 맞춰서 5번 실행이 되고
ready상태로 넘어온 프로세스는 다시 running상태로 넘어가게 됩니다.
그 후에야 다시 저 화살표로 표시된 다음줄을 실행할 수 있게되는것이죠.
그리고 끝나게 되면,
프로세스는 running상태에서 terminated된 상태로 넘어가서
프로세스가 종료가 되는것입니다.
사용자모드에서 커널모드로 수시로 이동된다는걸 아시겠죠?
수많은 인터럽트에 의해서요
시스템콜도 처리를 위해선 사용자모드에서 커널모드로 계속 바뀌어야 한다는것도요..!!
그리고 IO관련 처리가 되면 수많은 인터럽트와 시스템 콜, 스케쥴러, 하드웨어 등의도움이 많이 필요하고
실제 처리에서도 굉장히 처리가 많이 든다는것을 알 수 있습니다.
register는 1 cycle이면 되는데 Flash Drive는 단위 부터가 다르죠.
알고 넘어가야할 부분은 !
프로그램을 짤때, IO처리 또는 외부 하드웨어를 건드리는 처리를 최소화 시키는것이 중요합니다.
빈번한 IO처리는 엄청난 오버헤드. 시간을 많이 필요로 합니다.
빅데이터에서 사용하는 spark라는 플랫폼이 있는데
예전의 시스템보다 성능이 드라마틱하게 개선이 됐습니다.
spark는 모든 데이터를 메모리에 올려서 처리하려고 한다는 거에요.
기존 시스템은 데이터를 file IO를 저장매체에서 access를 하는식이었는데 말이죠.
핵심은 빈번한 IO시간을 줄이는것!!
'Computer(인강) > 운영체제' 카테고리의 다른 글
스레드 장단점 (0) | 2021.02.23 |
---|---|
스레드 개념 (0) | 2021.02.23 |
참고_IPC 기법2 (0) | 2021.02.23 |
참고_IPC 기법 1 (0) | 2021.02.23 |
프로세스와 IPC (0) | 2021.02.23 |