일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gameplay tag
- Replication
- Unreal Engine
- 게임 개발
- os
- local prediction
- 유니티
- attribute
- MAC
- gameplay effect
- CTF
- Multiplay
- 언리얼 엔진
- rpc
- Aegis
- gravity direction
- unity
- stride
- listen server
- dirty cow
- gas
- 게임개발
- photon fusion2
- map design
- ability task
- gameplay ability system
- ret2libc
- 메카님
- 언리얼엔진
- animation
- Today
- Total
목록os (8)
Replicated
여러 스레드가 동시에 같은 코드나 데이터를 사용할 때 문제가 발생하지 않도록 보장되는 상태그니까 레이스 컨디션 없는 상태다 그럼 스레드 세이프 하려면? (== 레이스 컨디션 없애려면?) 1. 뮤텍스2. 원자적인 연산3. 애초에 락을 안써도 되도록 설계 Peterson’s Algorithm?두 스레드(또는 프로세스)가 공유 자원에 동시에 접근하지 않도록 하는 것스핀 락, flag[]와 turn 근데 상호 배제를 소프트웨어 기반으로만 해결하려고 한다?https://lagooneng.tistory.com/117 Lock의 구현락: 상호배제를 위한 API 이걸 어떻게 구현할 것이냐?.. 실제로는 하드웨어와 OS의 협업 1. 인터럽트로 2. 소프트웨어만 only approach 3. 소프트웨어가 하드웨어와 협업 ..
프로그램 실행 시 순간 필요한 부분만 실시간 기계어 번역이후 번역된 코드를 캐싱해두고 재사용바이트 코드 생각하면 됨
장기 스케줄러- 디스크에 있는 프로그램을 메모리에 "불러올지" 결정- 실행 중인 프로세스의 개수를 조절- 과거 batch에 썼던 거.. 쿠버네티스에서 간접적으로 활용하는 듯 중기 스케줄러- 실행 중인 프로세스를 "일시 중지(스왑 아웃)"할지 결정- 메모리 부족 시 사용- 있긴 한데 요즘엔 램이 커서 스왑이 잘 안일어남 단기 스케줄러- CPU를 다음에 어떤 프로세스에게 줄지 결정- 컨텍스트 스위칭 시 작동, 가장 빠르게 작동해야 함- 항상 사용. RR, MLFQ 등 운영체제 시간에 배우는 거 왜 장기 중기 단기 스케줄러라는 말을 처음 들어봤나 했더니중기는 스왑이라는 정책으로서 요즘 사용하고장기는 안쓰니까단기만 그냥 배운 듯
Stack이 빠름메모리 접근이 간단하고 예측 가능LIFO 구조라 간단함그리고 메모리에 연속적으로 저장되서 지역적 로컬리티가 좋음(캐시 친화적) 힙이 더 느린데 그 이유는동적 메모리 할당이랑 해제가 비용이 큼 -> 게임 개발 시 Object Pooling 쓰는 이유거기에 연속적 할당도 아니라 메모리 단편화 발생
일단 스택은 작다학부 윈도우 비쥬얼 스튜디오 쓰는 1학년들 백준 풀다 자주 보는게 스택 모자라서 터진 거스택은 프로그램 시작 시 운영 체제에 의해 결정되고, 원하는 경우 링커 설정이나 실행파일 속성, 스레드 생성 시 옵션으로 변경 가능 힙은 크기가 유연하게 변함크기는 프로그램 시작 시 동적으로 할당됨에 따라 다름 좀 더 정확히 말하면 힙은 sbrk랑 brk로 힙 주소 공간 확장이 가능함(메모리 반환 시 청크 bin에 넣어뒀다가 빼오는 방식을 쓰기는 하는데, 일단 부족하면 공간 받아와야 함)
초기화 안 된 전역 변수랑 정적 변수 -> BSS 세그먼트초기화 한 거면 데이터 세그먼트 지역변수는 그냥 스택에 들어가고동적 할당한 거는 힙에 들어간다
InitProcess를 뜻함 (또는 systemd.. 얘도 PID1임)PID1번인 거 시스템 부팅 시 커널이 사용자 공간으로 제어를 넘긴 뒤 가장 먼저 실행되는 프로세스 역할- 시스템 초기화- 모든 다른 사용자 프로세스들의 부모- 고아 프로세스 수용자
1. 자식 프로세스가 상태를 안알리고 죽거나wait() 또는 waitpid()로 수거되지 않았다는 것 발생 현상: 좀비 프로세스 -> 커널이 PID와 종료 상태 정보 유지.. 자원 계속 차지함 해결 방법- 자식의 종료를 반드시 wait, waitpid로 처리- 자식 프로세스의 종료에 관심이 없으면 밑의 코드#include #include #include #include void sigchld_handler(int sig) { // 여러 자식이 한꺼번에 종료되었을 수도 있으므로 반복 while (waitpid(-1, NULL, WNOHANG) > 0) { // 자식 수거 }}int main() { signal(SIGCHLD, sigchld_handler); // SIG..