.


:




:

































 

 

 

 


Linux




3. 6. 1

 

 

Linux clone(), . fork(), .

, , . , , , , . , clone() (pid), .

( clone() ', ).

ϳ clone() 1:1. , ( Linux , , , ).

Linux , . Linux task_struct, .

Linux

Linux clone(). Linux , .

. , , clone(), . .

POSIX 1996 , POSIX.

Linux

, Linux ᒺ, . , (pid). ³ , :

;

;

 

, .

3. 6. 2

, POSIX pthread_create() :

#include<pthread.h>

int pthread_create(pthread_t *th, pthread_attr *attr,
void *(*thread_fun)(void *).void *arg);

:

th pthread_t, ; (thread handle).

Attr ( , );

thread_fun ,
void *mythread_fun(void *value)
{
//
}

arg , ( value).

POSIX:

#include<pthread.h>

//

void *thread_fun(void *num)

{

printf( %d\n,(int)num);

}

//

pthread_t th;

//

pthread_create(&th, NULL,thread_fun,(void *)++thread_num);

//

, . , main() , : , main(), .

POSIX

 

thread_fun() pthread_exit():

#include<pthread.h>

void pthread_exit(void *retval);

retval . :

void *turead_fun(void *num)

{

printf( %d\n,(int)num);

pthread_exit(0);

}

:

return main() , ;

pthread_exit() main() , , .

pthread_exit() , , .

pthread_join(). :

int pthread_join(pthread_t th,,void **status);

, , , , th, . status , , ( pthread_exit()). pthread_join(), .

, . . , . , . , . .

. , , -, , -볺. .

, , , . . 1:1, , .

(, , ). . - .

, . ϳ ( fork()) , . , .

 


 

4

. , ( ). N>1, N ( ).

, , (scheduling). , , .

, .

, .

4. 1

, .

4. 1. 1

( ) -. , , (CPU birst), , -, - - (I/O burst). 2 8 .

, -, (CPU bound). . , , . , -, - (I/O bound). , . , .

 

, ( )

 
 

 


, - ( )

     
 
 
 

 

 


- (I/O bound)

 
 


(CPU bound)

4.1

4. 1.2

. , , , . , (scheduler), , (scheduling algorithm).

, , .

.

̳ . . ( ) . 50-150.

. , (, ). ; . , :

(, , );

( , , - ).

, , . , , . ³, . .

4. 1. 3

1:1( ), . , , , . , ( 1:M M:N). : , .

(long-term scheduling), c (medium-term scheduling) (short-term schediling).

4. 2. 1

, . , . , , . (, ) , ; . , . 㳿 , , , , .

4. 2. 2

. ³ , , (ready queue).

:

-;

();

.

, , , . , (, -); (schediling queues) (wait queues). \ , . . 4.2 .

4. 2. 3

, ( CPU scheduling), . :

?

?

, , . , . (dispetcher), ( ).

.


 

TCB4 TCB2


 

 

1

 

 

2 TCB5 TCB1

 

 

3

 

 

4. 2

FIFO, , .

㳿 , , .

4. 3 㳿 .

, 㳿 , :

, (, - );

;

( , );

(, , , ).

, , , . 㳿 .

(preemptive multitasking) , , . . .

(non=preemptive multitasking) . , , , . , , , . Nowell Net Ware.

, (- 񳺿 ). , . , , , . , . (, Net Ware ).

, . , .

㳿 , , . , . , , .

FIFO

() , , . FIFO, FIFO.

, , , .

:

;

(, , , );

(convoy effect).

. , ( Tcpu), , Tio, -. Tcpu . Tio -, , - . Tcpu , Tio ( , , ) -. ϳ Tcpu .

(round-robin scheduling). round robin , , , ( , ).

, (time quantum, time slice) . , . , . 񳺿 .

. . , , . ( 4. 3). .

t

 

 

,

 

t+q

 

 

 
 


t+2*q

 

 

4.3.

, , . , , .

, , , . , , , , , . FIFO ( ). 10 100 .

, , . , , -, , . ( , ) , -, .

4. 4. 3

, . .

: , . .

(multilevel queues). ( , , ).

г :

, (, ), ;

, . .

, , .

, , . , 1973 , 1967 . ( starvation).

. , , ( ), , , . , , , .

4. 4. 4

, .

(Shortest Time to Completition First, STCF), , . , , .

STCF , , - . , , . ( , , , ). , .

, .

tn+1=aTn+(1-a)tn, 0 < a < 1, t0=T0,

tn+1 ;

tn ;

Tn .

a=0,5, .

STCF , (Shortest Remainig time to completition first, SRTCF). STCF , , , , , , , .

4. 4. 5

(multilevei feedback queues) ( - ), .

: , .

³ , :

;

ᒺ , , .

, , ( FIFO-).г , ( ). , ( ). (, -) , ( 4. 4). , , .

 

 

 

 

FIFO

4. 4

(lottery scheduling) , , .

, :

, T;

T ;

, , .

:

, ;

, ;

SRTCF , ( , );

, , (, , , A 50% , B C 25%, A , B C );

, .

, , . , ( ). , , .

4. 5 Linux

Linux ( 2.4 ) ,
2.6.

Linux , .

: FIFO, , .

4. 5. 1

, , :

;

FIFO , (, ) ;

, , .

4. 5. 2

. (epochs). , . . , . . - , . , . .

, , . nice() setpriority(). - .

: , , , , , , . - - .

:

policy , (, FIFO );

nice , ( nice , );

counter , . counter .

, ( scedule()).

, . , .

(lazy invocation). ³ , need_resched 1. : ; , , ; . , , , , need_resched . , .

, , , . . , . , , .

, . , .

, , , . , , , - (, , -.

, ( ). , :

for each_task(p)

p.counter=(p.counter/2)+p.nice;

, , , -. , .

. goodness(). , .

0 , . . , , .

³ 0 1000 , . , . :

c=p.counter+p.nice;

p .

, , . , , , (, , clone()).

, . ( counter ) , , . , , fork() counter : , .

.

. dz .

, . , , .

, -, , (, ) .

dz , , .

4. 5. 3

, . Linux .

. , 2.6 . , .

, , .

, , . г : , . , . .

. ϳ , , . , , . , .

4. 5. 4

Linux, ( nice) .


setpriority():

#include<sys/resource.h>

int setpriority(int which, int who,int priority);

, which PRIO_PROCESS PRIO_USER, , who . ( , who ), .

priority . 20 20, . 0. priority .

getpriority():

Int getpriority(int which, int who);

, which who , setpriority().

:

//

setpriority(PRIO_PROCESS,0,10);

//

printf( : %d\n,getpriority(PRIO_PROCESS,0));

nice():

#include<unistd.h>

int nice(int inc); // inc.

, , . ֳ : , . . , , .

, . , , . .


 

5

糺䳿 . .

5. 1 䳿

, , .

, , , . .

, . ֳ , ( ). , , ( ).

, , .

, , (shared data). . - . .

, , . , , , .

䳿 .

. , - 򳺿 , , .

䳿 . , , . 㳺 .

, -, , -, .

, , , , , .

, , .

5. 2 䳿

, , , , .

, ( ). , total_amount. :

total_amount=total_amount+new_amount;

: , , , total_amount ?

:

total_amount ;

new_amount .

, . 100 . 1000, 100. , . ( 1).

1. total_amount, 100.

2. total_amount, 100.

3. 1 total_amount 1000, 1100 .

4. 2 total_amount 100, 200 , , .

.

( 2).

1. total_amount, 1000 1100 .

2. total_amount, 1100, 100 1200 .

.

, . : , , . (race condition), , . ( , ).

. ³ , . , .

- , , : , , , .

, , .

.

( ) . , , , . , , , . , .

. . . , ( , ), . , (, , , ).

. .

.

5. 2. 2

.

, , , . , .

, , , , , . (critical section):

//

total_amount=total_amount+new_amount;

//

, , , , , ( , ). 2, .

, .

(mutual exlusion): .

: , ( ).

: , , .

: ?

. , , , , , .

(locks). , . : (, acquire_lock()) (, release_lock()). , , , , . ϳ .

acquire_lock(lock);

//

release_lock(lock);

, (mutex, mutual exclusion).

. , . :

int lock=0;

void aquire_lock(int lock)

{

// (lock==0), ( lock=1)

//

// ,

while(lock!=0); //(1)

lock=1; //(2)

}

void release_lock(int lock)

{

//

lock=0;

}

, (1) (2) . , 0, .

5. 3

.

, , . , .

:

, , ();

, , 峺 ( );

, ; , ;

, ( - );

, , .

, - (produser-consumer problem) (bounded buffer).

. , - -. ᒺ, . , ᒺ, ᒺ, .

n. ᒺ , . ᒺ, . :

1. , , .

2. ᒺ , ( n ᒺ), , .

3. ᒺ , , , ᒺ.

1965 . . , .

䒺 , :

(down): , , , , (, ). wait. :

void down(semaphore_t sem)

{

if (sem>0)

sem--;

else sleep();

}

(up): ; , ,





:


: 2016-11-20; !; : 2088 |


:

:

! . .
==> ...

1949 - | 1738 -


© 2015-2024 lektsii.org - -

: 0.319 .