Computer(인강)/운영체제(41)
-
deadlock과 starvation
안녕하세요 bannavi입니다^ㅅ^ 오늘은 교착상태(Deadlock)와 기아상태(Starvation)에 대해 배워보도록 할거에요 바로 시작해볼게요! 교착상태(Deadlock) 무한 대기 상태: 두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태 (프로그램이 동작을 못하고 있는 상태) 배치처리 시스템에서는 일어나지 않는 문제로 프로세스, 스레드 둘다 이와 같은 상태가 일어날 수 있음. 참고: 교착상태 발생 조건 - 다음 네가지 조건이 모두 성립될 때, 교착상태 발생 가능성이 있음 1. 상호배제(Mutual exclusion): 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다. 2. 점유대기(Hold and wait): 프로세스가 할당..
2021.02.25 -
세마포어
안녕하세요 bannavi입니다^ㅅ^ 오늘은 세마포어에 대해서 다뤄볼거에요 그럼 바로 시작하겠습니다!! 동기화(Synchronization) 이슈 동기화 : 작업들 사이에 실행 시기를 맞추는 것 여러 스레드가 동일한 자원(데이터) 접근시 동기화 이슈 발생 - 동일 자원을 여러 스레드가 동시 수정시, 각 스레드 결과에 영향을 줌 동기화 이슈 해결 방안 - Mutual exclusion(상호 배제) - 쓰레드는 프로세스 모든 데이터를 접근할 수 있으므로, 1. 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access 필요 2. 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막기 Mutual exclusion(상호 배제) 1. 임계 자원(critical reso..
2021.02.25 -
스레드 동기화 문제
안녕하세요 bannavi입니다^ㅅ^ 제 포스팅이 도움이 되고 있었으면 좋겠어요 헤헤 오늘은 스레드 동기화 문제를 포스팅 해보겠습니다 고우고우~~ 동기화(Synchronization) 이슈 누가 읽고 누가 쓰는지 순서가 정해져 있지 않다보니, 꼬이게 보면 비정상 동작이 발생할 때가 있음. 이렇게 되면 디버깅 하기도 쉽지가 않아짐. -> 스레드 관리가 필요함.
2021.02.25 -
스레드 장단점
안녕하세요 bannavi에요^ㅅ^ 오늘은 스레드의 장단점을 살펴보겠습니다! Thread 장점1 1. 사용자에 대한 응답성 향상 2. 자원 효율 - IPC 기법과 같이, 프로세스간 (자원 공유를 위한) 번거로운 작업이 필요 없음 - 프로세스 안에 있으므로, 프로세스의 데이터에 모두 접근 가능 3. 작업이 분리되어 코드가 간결하다 - 사실 작성하기 나름 Thread의 단점 1. 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받음 2. 스레드를 많이 생성하면, Context Switching이 많이 일어나, 성능 저하 - 예: 리눅스 OS에서는 Thread를 Process와 같이 다룸 스레드를 많이 생성하면 모든 스레드를 스케쥴링 해야 하므로, Context Switching이 빈번할 수밖에 ..
2021.02.23 -
스레드 개념
안녕하세요 bannavi입니다^ㅅ^ 오늘은 스레드의 개념에 대해서 살펴보려고 합니다 바로 진행해볼게요~ Thread(스레드) - Light Weight Process 라고도 함(프로세스보다 구조가 적다) - 프로세스(프로세스 간에는 각 프로세스의 데이터 접근이 불가, 그래서 IPC사용했었어) - 스레드(하나의 프로세스에 여러개의 스레드 생성 가능, 스레드들은 동시에 실행가능, 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능) - 프로세스처럼 IPC가 필요 x -Thread는 각기 실행이 가능한 stack이 존재 쓰레드 별로 register따로, stack따로 있다. code와 data를 공유. 레지스터를 갖고있기 때문에 별도로 동시에 실행이 가능하다 소프트웨어 병행 작업 처리를 위해 mult..
2021.02.23 -
프로세스 총정리와 프로그램 성능 개선 방법의 이해
안녕하세요 bannavi입니다^ㅅ^ 오늘은 그동안 배웠던 프로세스를 총 정리해보고 프로그램 성능 개선 방법을 이해해보는 시간을 가져볼게요 바로 시작하겠습니다 고고! 0.05초가 지나면 그럼 이제 여기에 있는 이 코드를 CPU에서 실행하게 되는것이죠 이 라이브러리에 open함수를 열어서 어셈블리어나 기계어를 들여다 보면, 결과적으로 어떤 코드가 들어가 있느냐, 이렇게 인터럽트를 일으켜주는 것이죠. 그러면 open()이라는 함수가, int에 의해서 사용자모드를 커널모드로 바꿔주고, OS가 처음 부팅될 때 만들어진 IDT에서 0x80에 해당하는 주소(함수)를 찾아서 실행해주고, 그 이후 system_call()함수에서 eax로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템콜 함수로 이동하게 됩니다. ..
2021.02.23