실제 os에서 우선순위 처리는 프로그램이 들어올 때 현재 실행되고있는 우선순위보다 높은게 들어오면 바로 그걸 실행하고 아니면 FIFO 스택에 넣어서 실행한다. 학교에서 배운게 조금씩 기억이 난다..
하지만 이런내용이 과제엔 없으니 나름 해석해서 구현해야 한다. 우선순위 높은건 더 자주 실행하라고 했으니까..
그래서 둘 다 구현해봄.
스레드는 싱글스레드, 멀티스레드. 멀티스레드는 하나의 프로세스에서 여러개의 스레드로 공간을 공유해서 시간단축의 장점이 있는 듯.
https://en.wikipedia.org/wiki/Thread_%28computing%29
프로세스 상태
https://wiki.kldp.org/wiki.php/ProcessManagement
스케쥴링 방식엔
FCFS (First Come First Service)
Round Robin - 일정 시간동안 실행하고 못끝내면 다음 프로세스로 넘어감
Priority Scheduling
등등..
list size는 element 제거할 때마다 달라지는걸 반영해서 random int 범위 설정
enum class는 약간 dictionary 비슷하게 사용하는 듯.
나도 인터넷에서 봤다고 그렇구나~ 하고 끝나지 말고 이런데다가 어떤걸 봤는지 정리하는게 좋을 것 같다.
set으로 한다음에 toList
linkedlist에서 poll 한다음 add
for (e in priorityPQ) {
e.ageUp()
e.aging()
}
만약 cpu코어 갯수보다 프로세스 갯수가 더 많으면? 코어마다 하나의 프로세스가 들어가고 이 프로세스 내에 쓰레드가 실행되고 그 안에서 쓰레드 스케줄링이 일어나는 듯.
윈도우는 쓰레드를 스케쥴링, 리눅스는 프로세스를 스케쥴링 하는 듯. 이런거 보면 os마다 다른듯.
하나의 프로세스에서 여러개의 쓰레드로 나눠야 context switching에서 유리할 테니까 쓰레드 단위로 실행하는게 유리한 듯.
환경에 따라서 같은 프로그램을 돌려도 실행속도가 차이가 나는듯.
쓰레드 만드는 개수? 막 10만개 생성되고 하는거 들어보면 자원이 허용하는 내에선 얼마든지 가능한 듯.
interval, import kotlin.system.exitProcess; exitProcess(1)
semaphore는 아얘 하나의 단위동작으로 묶어서 context switching이 일어나지 않도록 모든 interrupt를 다 막아넣고 실생한다.
https://worthpreading.tistory.com/90
관련해서 banker's 알고리즘 알면 좋을 듯.
데드락이 발생하는 조건 4개와 회피하는 조건 4개. 아는게 좋을 듯.
폰 노이만 구조, 하버드 구조. 버스 병목현상. 현재는 둘 다 쓰이고 있다고 한다.
https://velog.io/@ckstn0777/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0
'강의 > 부캠 안드로이드 학습정리' 카테고리의 다른 글
day 13. 네트워크 지식들.. (0) | 2021.08.04 |
---|---|
day 12. 멀티쓰레드. (0) | 2021.08.04 |
day 9. git 저장소 만들기 (0) | 2021.07.29 |
day 8. 코틀린의 함수형 프로그래밍 (0) | 2021.07.28 |
day 7 클래스 상속 (0) | 2021.07.27 |